Ray*_*Ray 4 java xml xslt xpath
就我而言,我有:
<booklist>
<book id="1">
</book>
<book id="2">
</book>
<book id="3">
</book>
......
</booklist>
Run Code Online (Sandbox Code Playgroud)
我怎么才能回来:
<booklist>
<book id="1">
</book>
</booklist>
Run Code Online (Sandbox Code Playgroud)
如果我使用/booklist/book[@id=1]
,我只能得到
<book id="1">
</book>
Run Code Online (Sandbox Code Playgroud)
但我还需要文档元素.谢谢
而不是选择你的元素确实需要,尽量排除这些元素你不想.
如果你只是使用XPATH,这将选择所有除元素book
谁的元素@id
不等于1(即<booklist><book id="1" /></booklist>
).
//*[not(self::book[@id!='1'])]
Run Code Online (Sandbox Code Playgroud)
如果您需要XSLT解决方案,此样式表有一个空模板,该模板匹配所有没有的<book>
元素,这样就无法将@id="1"
它们复制到输出中.
其他所有内容(文档节点<booklist>
和<book 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>
Run Code Online (Sandbox Code Playgroud)