XPath过滤子节点

时间:2012-05-22 10:17:23

标签: xml xpath

我有一个xml包含以下信息,我使用Xpath来解析它

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

我的目标是获取标记'a'的节点列表,并在每个子节点列表中包含'b'和'c'(等过滤掉'd'!)我目前正在做的是使用'/ root / a '要获得包含所有'a','b'和'c'的节点,然后去除'c',我的目标是在XPath中进行过滤,而不是使用额外的代码,无论如何我可以做到了吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您可以通过使用下面的图案复制所有内容来过滤掉元素,然后只截取要过滤掉的元素。

<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


  <xsl:template match="a/d"/>


  <xsl:template match="node() | @*">
    <xsl:copy>
      <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet> 

这是有效的,因为特殊模板比一般模板具有更高的优先级。因此,第二个适用于除d以下a以外的所有元素。第一个模板什么都不做,即忽略元素。