XPATH:选择xml文件的子集

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)

但我还需要文档元素.谢谢

Mad*_*sen 6

而不是选择你的元素确实需要,尽量排除这些元素你不想.

如果你只是使用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)


fb5*_*b55 2

当您尝试选择一个子元素时,只会返回该子元素。