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

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

我的目标是获取标记“a”的nodelist,并在每个包含“b”和“c”的子nodelist中(等等,过滤掉“d”!)我目前正在做的是使用'/root/a'获取包含所有'a'、'b'和'c'的节点,然后去掉'c',我的目标是在xpath中进行筛选,而不是使用额外的代码,我还能做吗?谢谢!

最佳答案

您可以通过复制下面模式的所有内容来筛选出一个元素,只需截取要筛选出的元素。

<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之外的所有元素。第一个模板什么也不做,即忽略元素。

关于xml - XPath过滤子节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10700064/

10-10 17:32
查看更多