В одном из ваших комментариев вы говорите: «элементы, следующие после IgnoreEmptyElementInd, правило должно применяться», и в этом случае кажется, что вам нужно использовать «предыдущую» ось в XPath для определения значения.
Таким образом, вы можете расширить свой XSLT с помощью этого шаблона, чтобы игнорировать пустые узлы, когда IgnoreEmptyElementInd установлено в значение true.
<xsl:template
match="*[not(node())][preceding::IgnoreEmptyElementInd[. = 'true']]"/>
Итак, учитывая следующее XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="*[not(node())][preceding::IgnoreEmptyElementInd[. = 'true']]"/>
<xsl:template match="*[. = '-111']">
<xsl:copy>
<xsl:text>Default Found</xsl:text>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
При применении к вашему образцу XML выводится следующее:
<SampleUpdRq>
<RqUID>00000000-0000-0000-0000-000000000000</RqUID>
<UpdMsgRqHdr>
<ContextRqHdr>
<RsSelURL>111</RsSelURL>
<NetworkTrnData>
<TerminalIdent>a</TerminalIdent>
<Name>111</Name>
</NetworkTrnData>
<ClientApp>
<Org>dweer</Org>
<Name>aaaaaaaaaaaaaaaaaaa</Name>
<Version>112</Version>
<Channel>abc</Channel>
</ClientApp>
</ContextRqHdr>
<IgnoreEmptyElementInd>true</IgnoreEmptyElementInd>
</UpdMsgRqHdr>
<SampleKeys>
<SampleId>aaaaaaaaaaaaaaaaaaa</SampleId>
<AltSampleIdentifiers>
<SampleIdent>
<SampleIdentType>Default Found</SampleIdentType>
<SampleIdentValue>ttttttt</SampleIdentValue>
</SampleIdent>
</AltSampleIdentifiers>
<SampleType>
<SampleTypeValue>MMA</SampleTypeValue>
<SampleTypeSrc>bbc</SampleTypeSrc>
</SampleType>
<CommercialSampleType>Default Found</CommercialSampleType>
<COID>aaaaa</COID>
</SampleKeys>
</SampleUpdRq>
Когда IgnoreEmptyElementInd имеет значение «ложь», вместо него выводится следующее
<SampleUpdRq>
<RqUID>00000000-0000-0000-0000-000000000000</RqUID>
<UpdMsgRqHdr>
<ContextRqHdr>
<RsSelURL>111</RsSelURL>
<NetworkTrnData>
<TerminalIdent>a</TerminalIdent>
<Name>111</Name>
</NetworkTrnData>
<ClientApp>
<Org>dweer</Org>
<Name>aaaaaaaaaaaaaaaaaaa</Name>
<Version>112</Version>
<Channel>abc</Channel>
</ClientApp>
</ContextRqHdr>
<IgnoreEmptyElementInd>false</IgnoreEmptyElementInd>
</UpdMsgRqHdr>
<SampleKeys>
<SampleId>aaaaaaaaaaaaaaaaaaa</SampleId>
<AltSampleIdentifiers>
<SampleIdent>
<SampleIdentType>Default Found</SampleIdentType>
<SampleIdentValue>ttttttt</SampleIdentValue>
</SampleIdent>
<SampleIdentType/>
</AltSampleIdentifiers>
<SampleType>
<SampleTypeValue>MMA</SampleTypeValue>
<SampleTypeSrc>bbc</SampleTypeSrc>
<CommercialSampleType/>
</SampleType>
<CommercialSampleType>Default Found</CommercialSampleType>
<COID>aaaaa</COID>
</SampleKeys>
</SampleUpdRq>