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) {