XSL - выполнить код, если узел имеет данный узел в качестве родителя - PullRequest
4 голосов
/ 18 января 2010

У меня есть следующий XML (упрощенный):

<node1>
    <node2>
        <node3>
        </node3>
    </node2>
</node1>

И мне нужно определить (используя XSL), есть ли у узла 3 родительский узел с именем node1 (не только промежуточный родительский, поэтому в примере узел 3 является дочерним узлом узла 1)

Следующий код не работает:

<xsl:if test="parent::node1">

</xsl:if>

Спасибо

Ответы [ 2 ]

10 голосов
/ 18 января 2010

узел3 не является прямым дочерним , это потомок . Вместо этого используйте ось ancestor , которая выбирает всех предков (родитель, дед и т. Д.) Текущего узла.

http://www.w3schools.com/xpath/xpath_axes.asp

<xsl:if test="ancestor::node1">

</xsl:if>
1 голос
/ 18 января 2010

попробуйте это:

<xsl:if test="count(ancestor::node1)&gt;0">

</xsl:if>

Вы можете опустить счетчик, если хотите, он не требуется. Это может быть полезно, когда вы находитесь в рекурсивной структуре, чтобы найти глубину, в которой находится текущий узел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...