我现在已经阅读了许多(可能是全部)关于在XPath中排除元素的帖子,我只是不能让它工作。我不知道为什么。
假设我有以下结构:
<root>
<elemA>
Hello World!
</elemA>
<elemB>
This is awesome!
<elemC>Really!</elemC>
</elemB>
</root>
不,我想要除elemC
之外的所有元素。
根据我所读到的内容,我尝试了以下XPath:
选项1:
//*[not(self::elemC)]
选项2:
//*[not(name()='elemC')]
选项3:
//*[name()!='elemC']
我不知道为什么这不起作用,但怀疑有些愚蠢的错误。如果我完全相反(即省略not
或!
),XPath会正确选择elemC
元素。
结果应该是这样的:
<root>
<elemA>
Hello World!
</elemA>
<elemB>
This is awesome!
</elemB>
</root>
答案 0 :(得分:2)
XPath是供选择的。您要选择的内容在XML文档中不存在。
您需要其他工具(例如 XSLT )来生成基于输入XML文档的XML输出文档。 XSLT可以通过身份转换简单地生成您想要的输出,该转换补充了一个简单的模板,该模板禁止复制您不想要的元素(elemC
):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="elemC"/>
</xsl:stylesheet>
单靠XPath无法帮助您。