Java XPATH:选择xml文件的子集
就我而言,我有:Java XPATH:选择xml文件的子集,java,xml,xslt,xpath,Java,Xml,Xslt,Xpath,就我而言,我有: <booklist> <book id="1"> </book> <book id="2"> </book> <book id="3"> </book> ...... </booklist> 但是我还需要document元素。 谢谢当您尝试选择子元素时,只会返回该子元素。不要选择您想要的元素,而是尝试排除您不想要的元素 如果您只是使用XPATH,
<booklist>
<book id="1">
</book>
<book id="2">
</book>
<book id="3">
</book>
......
</booklist>
但是我还需要document元素。
谢谢当您尝试选择子元素时,只会返回该子元素。不要选择您想要的元素,而是尝试排除您不想要的元素 如果您只是使用XPATH,这将选择除
书籍
元素以外的所有元素,这些元素的@id
不等于1(即
)
如果需要XSLT解决方案,则此样式表有一个空模板,该模板匹配所有没有@id=“1”
的
元素,从而防止将它们复制到输出中
其他所有内容(文档节点
和
)都将与向前复制的标识模板匹配
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--Empty template to prevent book elements
that do not have @id="1" from being
copied into the output -->
<xsl:template match="book[@id!='1']" />
<!--identity template to copy all nodes and attributes to output -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我怎样才能返回:
<booklist>
<book id="1">
</book>
</booklist>
< booklist >
< book id=1 >
< /book >
< /booklist >
XPath是一种查询语言。计算XPath表达式无法更改XML文档的结构。
这就是为什么答案是:不,使用XPath这是不可能的
无论何时您想要转换XML文档(这里就是这种情况),最好的解决方案可能是使用XSLT——一种专门为处理和转换树结构数据而设计的语言
这里有一个非常简单的XSLT解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="book[not(@id=1)]"/>
</xsl:stylesheet>
<booklist>
<book id="1"/>
</booklist>
将此转换应用于提供的XML文件时,将生成所需的正确结果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="book[not(@id=1)]"/>
</xsl:stylesheet>
<booklist>
<book id="1"/>
</booklist>
好问题(+1)。关于完整的解决方案,请参阅我的答案。我在java中xml签名的xpath转换中面临一个问题。xpath转换似乎没有发生。你能看一下这个问题吗-