如何使用XPath跳过/忽略/排除嵌套的后代/标签/节点/元素?

时间:2018-07-05 23:04:08

标签: html xml xpath

假设我们有一个xml树:

<root>
<a>
 <b>
  <c>
   <d />
  </c>
 </b>
</a>
</root>

所需的输出:

<root>
<a>
 <b>
  <c>
  </c>
 </b>
</a>
</root>

即如何在不包含<d />节点的情况下选择整个 xml树?

相关问题:XPath - Get node with no child of specific type

2 个答案:

答案 0 :(得分:0)

XPath供选择。无法从输入XML中选择所需的输出。

XSLT用于转换。您可以通过身份转换加上模板来抑制d元素,从而轻松地将输入XML转换为输入XML:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <!-- By default, copy nodes to output -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- But suppress d elements -->
  <xsl:template match="d"/>

</xsl:stylesheet>

答案 1 :(得分:0)

首先选择类型为d的节点

.//*[d]

然后使用它选择除d个节点以外的所有内容

.//*[not(d)]