diff --git a/OpenXmlPowerTools/DocumentAssembler.cs b/OpenXmlPowerTools/DocumentAssembler.cs
index f4d9673e..394f4fb8 100644
--- a/OpenXmlPowerTools/DocumentAssembler.cs
+++ b/OpenXmlPowerTools/DocumentAssembler.cs
@@ -483,6 +483,7 @@ private static string ValidatePerSchema(XElement element)
+
",
@@ -521,6 +522,7 @@ private static string ValidatePerSchema(XElement element)
+
",
@@ -692,6 +694,10 @@ static object ContentReplacementTransform(XNode node, XElement data, TemplateErr
}
if (tableData.Count() == 0)
return CreateContextErrorMessage(element, "Table Select returned no data", templateError);
+
+ var optionalString = (string)element.Attribute(PA.Optional);
+ bool optional = (optionalString != null && optionalString.ToLower() == "true");
+
XElement table = element.Element(W.tbl);
XElement protoRow = table.Elements(W.tr).Skip(1).FirstOrDefault();
var footerRowsBeforeTransform = table
@@ -720,7 +726,7 @@ static object ContentReplacementTransform(XNode node, XElement data, TemplateErr
string newValue = null;
try
{
- newValue = EvaluateXPathToString(d, xPath, false);
+ newValue = EvaluateXPathToString(d, xPath, optional);
}
catch (XPathException e)
{
@@ -750,6 +756,8 @@ static object ContentReplacementTransform(XNode node, XElement data, TemplateErr
string xPath = (string)element.Attribute(PA.Select);
var match = (string)element.Attribute(PA.Match);
var notMatch = (string)element.Attribute(PA.NotMatch);
+ var optionalString = (string)element.Attribute(PA.Optional);
+ bool optional = (optionalString != null && optionalString.ToLower() == "true");
if (match == null && notMatch == null)
return CreateContextErrorMessage(element, "Conditional: Must specify either Match or NotMatch", templateError);
@@ -760,7 +768,7 @@ static object ContentReplacementTransform(XNode node, XElement data, TemplateErr
try
{
- testValue = EvaluateXPathToString(data, xPath, false);
+ testValue = EvaluateXPathToString(data, xPath, optional);
}
catch (XPathException e)
{