例如下面是xml
<products>
<product>
<name>Pen</name>
<Quantity>2</Quantity>
<Amount><Price>2</Price><Currency>USD</Currency></Amount>
</product>
<product>
<name>Pencil</name>
<Quantity>20</Quantity>
<Amount><Price>2</Price><Currency>USD</Currency></Amount>
</product>
<product>
<name>Bag</name>
<Quantity>25</Quantity>
<Amount><Price>2</Price><Currency>USD</Currency></Amount>
</product>
</products>
在我的xsl我用下面的方法删除
<xsl:copy-of select="node()[not(self::Quantity)]"/>
我还需要从<Currency>
<Amount>
我尝试如下
<xsl:copy-of select="node()[not(self::Quantity) and not(self::Amount/Currency)]"/>
但工作不正常。它将从<Amount>
我如何仅删除子节点<Currency>
?
答案 0 :(得分:2)
如果您真的想使用self
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()[self::Currency]"/>
或者如果您想了解其他更简单的方法:)
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Currency"/>
以上模板会复制除<Currency>
编辑:替换以下代码
<xsl:template match="product">
<product>
<xsl:for-each select="key('kProdByName', name)">
<xsl:if test="position() = 1">
<xsl:copy-of select="node()"/>
</xsl:if>
</xsl:for-each>
</product>
</xsl:template>
通过这个:(希望它有效)
<xsl:template match="product">
<product>
<xsl:for-each select="key('kProdByName', name)">
<xsl:if test="position() = 1">
<xsl:apply-templates select="node()|@*"/>
</xsl:if>
</xsl:for-each>
</product>
</xsl:template>
<xsl:template match="Currency|Quantity"/>