XSLT1.0删除节点



如何删除某些特定节点?

在我的例子中,我在REF段有很多节点,但我只想将REF与限定符GS一起使用,所有其他节点都应该删除。

<ITEM>
<ITEM_NUMBER_EN>123456789</ITEM_NUMBER_EN>
<ITEM_NUMBER_IN>1234</ITEM_NUMBER_IN>
<ITEM_NUMBER_SA>1234</ITEM_NUMBER_SA>
<QUANTITY>1</QUANTITY>
<QUANTITY_UNIT>PCE</QUANTITY_UNIT>
<LINE_ITEM_NUMBER>1</LINE_ITEM_NUMBER>
<AMOUNT_DETAILS>
<QUALIFIER>AAA</QUALIFIER>
<AMOUNT>1.00</AMOUNT>
<CURRENCY>EUR</CURRENCY>
</AMOUNT_DETAILS>
<REF>
<QUALIFIER>CR</QUALIFIER>
<REFERENCE>1234</REFERENCE>
<ADDITIONAL_INFO/>
</REF>
<REF>
<QUALIFIER>GS</QUALIFIER>
<REFERENCE>5647</REFERENCE>
<ADDITIONAL_INFO/>
</REF>
<REF>
<QUALIFIER>LI</QUALIFIER>
<REFERENCE>1</REFERENCE>
<ADDITIONAL_INFO/>
</REF>
<PACKAGE_DETAILS>
<!-- ... -->
</PACKAGE_DETAILS>
</ITEM>

你需要更多关于我的XML的信息吗?

编辑:输出应为:

<ITEM>
<ITEM_NUMBER_EN>123456789</ITEM_NUMBER_EN>
<ITEM_NUMBER_IN>1234</ITEM_NUMBER_IN>
<ITEM_NUMBER_SA>1234</ITEM_NUMBER_SA>
<QUANTITY>1</QUANTITY>
<QUANTITY_UNIT>PCE</QUANTITY_UNIT>
<LINE_ITEM_NUMBER>1</LINE_ITEM_NUMBER>
<AMOUNT_DETAILS>
<QUALIFIER>AAA</QUALIFIER>
<AMOUNT>1.00</AMOUNT>
<CURRENCY>EUR</CURRENCY>
</AMOUNT_DETAILS>
<REF>
<QUALIFIER>GS</QUALIFIER>
<REFERENCE>5647</REFERENCE>
<ADDITIONAL_INFO/>
</REF>
<PACKAGE_DETAILS>
<!-- ... -->
</PACKAGE_DETAILS>
</ITEM>

我目前的尝试是这样的:

<!--delete REF node-->
<xsl:template match="REF">
<xsl:for-each select ="./REF">
<xsl:if test="./QUALIFIER='LI'">
</xsl:if>
</xsl:for-each>
<!--copy all other nodes-->
<xsl:apply-templates select="@* | node()"/>
</xsl:template>

我目前唯一的解决方案是,用单独删除所有其他

<xsl:template match="REF[QUALIFIER='CR']"/>
<xsl:template match="REF[QUALIFIER='LI']"/>

您想要删除限定符不是"GS"的所有<REF>节点。

<xsl:template match="REF[@QUALIFER != 'GS']" />

除了身份模板(您似乎已经有了(之外,这些都是必需的。

最新更新