xslt test, чтобы увидеть, является ли узел одним из первых X потомков своего родителя - PullRequest
7 голосов
/ 03 августа 2009

Я редактирую шаблон XSLT, и мои навыки немного устарели.

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

<parent>
 <child>
 <child>
 <child>
 <child>
</parent>

Таким образом, первые три дочерних элемента возвратили бы true, но четвертый вернул бы false, чтобы усложнить ситуацию, все дочерние элементы не будут одинаковыми и будут иметь своих собственных потомков. Я уверен, что есть простой xpath, который это сделает.

Ответы [ 2 ]

20 голосов
/ 04 августа 2009

Это зависит от ситуации. Если вы находитесь в середине

<xsl:apply-templates select="/parent/child" />

Затем проверка с помощью

<xsl:if test="position() &lt; 4">

будет делать. Если вы находитесь в каком-то другом контексте, который не затрагивает все элементы <child>, тогда position() будет ссылаться на позицию в контексте , которая .

Если вы хотите проверку без контекста, вы можете использовать:

<xsl:if test="count(preceding-sibling::child) &lt; 3">
<!-- or -->
<xsl:if test="count(preceding-sibling::*) &lt; 3">

К выберите только первые три <child> элемента, это будет так:

/parent/child[position() &lt; 4]
0 голосов
/ 03 августа 2009

Вызовите функцию position(), чтобы определить, где существует узел в документе.

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