2010-04-28 64 views
1

水平。如果我有这样的XPath的选择一定量只有

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

XML结构是否有XPath语法,这将只选择前三个级别的节点?

所以它会收集

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

UPDATE

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

谢谢,精神科

回答

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> 
+0

将此作为xsl文件创建,然后将其分配给xmldatasource控件上的TransformFile属性。卓见!谢谢 – Psytronic 2010-04-28 11:59:56

+0

应该有一个xpath函数返回上下文节点的深度 – 2010-05-08 08:17:40

6

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

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