我有以下xml文件:
<?xml version="1.0" encoding="UTF-8"? xmlns:xn="whatever.xsd>
<rootNode>
<fileHeader />
<xn:child1>
<xn:child2 id="1">
....
</xn:child2>
<xn:child2 id="2">
....
</xn:child2>
<xn:child2 id="3">
....
</xn:child2>
....
</xn:child1>
</rootNode>
我希望根据child2标记的id属性获取输出xml。为此,我有以下xslt:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xn="genericNrm.xsd">
<!-- identity template -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- override the above template for certain MeContext elements; output nothing. -->
<xsl:template match="xn:child1[not(xn:child2/@id != '1') and not(xn:child2/@id != '3')]">
</xsl:template>
</xsl:stylesheet>
所以,输出应该是这样的:
<?xml version="1.0" encoding="UTF-8"? xmlns:xn="whatever.xsd>
<rootNode>
<fileHeader />
<xn:child1>
<xn:child2 id="1">
....
</xn:child2>
<xn:child2 id="3">
....
</xn:child2>
....
</xn:child1>
</rootNode>
但是我无法得到它,我的xslt出了什么问题?
编辑:更新xslt,因为它有一个拼写错误
答案 0 :(得分:2)
此:
<xsl:template match="xn:child[not(xn:child2/@id != '1') and not(xn:child2/@id != '3')]">
匹配名为xn:child
的元素。您的XML中没有这样的元素。也许你的意思是:
<xsl:template match="xn:child2[@id != '1' and @id != '3']"/>
-
注意:命名空间声明不能出现在XML声明中。此外,如果您希望前缀匹配给定命名空间中的节点,则必须将其绑定到与XML输入使用的URI相同的命名空间URI(前缀本身可以是任何内容)。