Templates XSL模板匹配,然后是以下同级上的IF条件
我有以下问题。我需要知道在x个同名子节点中的任何一个上是否满足条件,并且不处理该行。我正在将一个xml解析为一个文本文件,但它可能有两个或三个相同的子节点,称为具有不同值的same,如果其中一个满足条件,则处理该行 以下是我的XML的一部分:Templates XSL模板匹配,然后是以下同级上的IF条件,templates,xslt,position,match,Templates,Xslt,Position,Match,我有以下问题。我需要知道在x个同名子节点中的任何一个上是否满足条件,并且不处理该行。我正在将一个xml解析为一个文本文件,但它可能有两个或三个相同的子节点,称为具有不同值的same,如果其中一个满足条件,则处理该行 以下是我的XML的一部分: <home> <app> <data> <rec> <rpos>1</rpos>
<home>
<app>
<data>
<rec>
<rpos>1</rpos>
<itemdef>
<item>HLK-TEST-A</item>
<desc>SOMETHING1</desc>
<ics>
<code>HKU</code>
<bpid></bpid>
<citem>TEST-A</citem>
</ics>
<ics>
<code>HLK</code>
<bpid></bpid>
<citem>TEST-A</citem>
</ics>
</itemdef>
</rec>
<rec>
<rpos>2</rpos>
<itemdef>
<item>HLK-TEST-B</item>
<desc>Test</desc>
<ics>
<code>HKU</code>
<bpid></bpid>
<citem>TEST-B</citem>
</ics>
</itemdef>
</rec>
<rec>
<rpos>3</rpos>
<itemdef>
<item>HLK-TEST-C</item>
<desc>Test3</desc>
<ics>
<code>HLK</code>
<bpid></bpid>
<citem>TEST-C</citem>
</ics>
</itemdef>
</rec>
<rec>
<rpos>4</rpos>
<itemdef>
<item>HLK-TEST-D</item>
<desc>SOMETHING4</desc>
<ics>
<code>HLK</code>
<bpid></bpid>
<citem>TEST-D</citem>
</ics>
<ics>
<code>HKU</code>
<bpid></bpid>
<citem>TEST-D</citem>
</ics>
</itemdef>
</rec>
</data>
</app>
</home>
基本上,记录1、3和4必须处理,因为它们有一个值为HLK的“代码”标记
以下是我在XSLT上的内容。。。虽然我只能得到记录1和3。。。你能帮忙吗
XSL:
但应该是:
105604|T|HLK-TEST-A|SOMETHING1|||
105604|T|HLK-TEST-C|Test3|||
105604|T|HLK-TEST-D|SOMETHING4|||
第四个
rec
元素被过滤掉,因为空模板在rec
元素上匹配,而最后一个ics
元素不以“HLK”开头。在XML中,第四个rec
元素的最后一个ics
元素的值为“HKU”,而不是以“HLK”开头
从示例XML看来,空模板的标准应该是匹配没有以“HLK”开头的itemdef/ics/code
元素的rec
元素,而不管ics
元素的position()
:
<xsl:template match="rec[not(itemdef/ics/code[starts-with(.,'HLK')])]" />
非常感谢你!你的第一个建议成功了!我为此工作了两天,却没有意识到我需要的是相反的东西:)谢谢你们!
105604|T|HLK-TEST-A|SOMETHING1|||
105604|T|HLK-TEST-C|Test3|||
105604|T|HLK-TEST-D|SOMETHING4|||
<xsl:template match="rec[not(itemdef/ics/code[starts-with(.,'HLK')])]" />
<xsl:template match="rec" />
<xsl:template match="rec[itemdef/ics/code[starts-with(.,'HLK')]]">
<xsl:apply-templates select="itemdef"/>
</xsl:template>