XPath выбрать только определенное количество уровней - PullRequest
1 голос
/ 28 апреля 2010

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

UPDATE

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

Спасибо, Пси

Ответы [ 2 ]

6 голосов
/ 28 апреля 2010

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

//*[count(ancestor::*)<3]
1 голос
/ 28 апреля 2010

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

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...