XPath / XmlCompiledTransform: проверка родительского элемента с помощью функции XPath - PullRequest
1 голос
/ 01 декабря 2011

Я не уверен, действительно ли я делаю ошибку или она просто не работает должным образом:

<xsl:if test="position() = 1 or parent::position() = 1">
   <!-- do something -->
</xsl:if>

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

Проблема в том, что "parent :: position () = 1" .. с .ml XmlCompiledTransform я получаю

Ожидаемый конец выражения найден '('. ... sition () = 1 или parent :: position -> (<- = 1. </strong>

Теперь, видимо, ей не нравится эта функция position () во второмчасть, но ... как мне получить позицию родителя? Как, вообще, объединить функции XPath с XPaths в тестах?

1 Ответ

2 голосов
/ 01 декабря 2011

Хороший вопрос, + 1.

Вам необходимо определить, что означает позиция родителя .

parent::node()[position() = 1] 

всегда true(), когда существует родительский узел (false(), только если контекстный узел является узлом документа /, так как этот узел является верхним узлом в дереве и не имеет родителя)потому что любой узел в дереве (правильно сформированный XML-документ) по определению может иметь не более одного родительского узла.

Скорее всего, вы хотите проверить, что родительский элемент является первым в порядке документасреди его братьев и сестер .Один из способов проверить это:

not(parent::node()/preceding-sibling::*)

Итак, полный код становится :

<xsl:if test="position() = 1 or not(parent::node()/preceding-sibling::*)">        
   <!-- do something -->        
</xsl:if>        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...