3

我有一个 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中进行过滤而不是使用额外的代码,无论如何我可以做到吗?谢谢!

4

1 回答 1

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。第一个模板什么都不做,即忽略元素。

于 2012-05-22T10:22:33.950 回答