XPath仅选择一定数量的级别

时间:2010-04-28 11:26:40

标签: xpath

如果我有像这样的xml结构

<root>
  <sub>
    <node />
    <node />
  </sub>
    <sub>
      <node />
    <sub>
  <sub>
    <sub>
      <node />
    </sub>
  </sub>
  <sub>
    <sub>
      <sub>
        <node />
      </sub>
      <node />
    </sub>
  </sub>
  <node />
  <node />
</root>

是否有一个xpath语法只能选择前三个节点级别?

所以它会收集

<root>
  <sub>
    <node />
    <node />
  </sub>
    <sub />
  <sub>
    <sub />
  </sub>
  <sub>
    <sub />
  </sub>
  <node />
  <node />
</root>

更新

为了解释我在做什么,我有一个asp:treeview,我绑定到一个asp:xmldatasource,我希望树视图只能深入三个节点。有可能在treeview或xmldatasource控件上以另一种方式执行它,但xpath似乎是最明显的

谢谢,Psy

2 个答案:

答案 0 :(得分:6)

您可以检查祖先轴数,实际上是深度:

//*[count(ancestor::*)<3]

答案 1 :(得分:1)

您可以添加一个规则,该规则可以匹配某个级别以下“无效”的所有内容:

<xsl:template match="/*/*/*/*"/>

这是一个完整的例子:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output indent="yes"/>
  <xsl:template match="node() | @*">
    <xsl:copy>
      <xsl:apply-templates select="node() | @*"/>
    </xsl:copy>
  </xsl:template>


  <xsl:template match="/*/*/*/*"/>

</xsl:stylesheet>