2010-04-28 2 views
1

уровней Если у меня есть структура XML как этот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> 

Есть ли синтаксис XPath, который будет выбрать только первые три уровня узлов?

так будет собирать

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

UPDATE

Просто, чтобы объяснить, что я делаю, у меня есть жерех: TreeView, который я связываться с осины: XmlDataSource, и я хочу, чтобы древовидный вид отображался только на трех узлах. Может быть возможно сделать это на TreeView или XmlDataSource управления другим способом, но XPath казался наиболее очевидным

Спасибо, Psy

ответ

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, а затем назначьте его свойству TransformFile в работе управления xmldatasource. Великолепная идея! Спасибо – Psytronic

+0

должна быть функция xpath, которая возвращает глубину контекстного узла –

6

Вы можете проверить количество осей предок, который на самом деле глубина:

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