Сопоставить узел, если он имеет определенный атрибут и его родитель имеет такой же атрибут? - PullRequest
1 голос
/ 09 ноября 2011

ОК, у меня есть структура помощи для поиска, например:

<c01 level="file">

<c02 level="file"></c02>

</c01>

Для моего шаблона XSLT я хотел бы иметь возможность сопоставлять только узлы с атрибутом level = "file", у которых есть родительский элемент, а также с атрибутом level = "file", чтобы я мог выполнить определенное форматирование на ребенка.

Обычно для соответствия level = "file", я просто использую следующее:

<xsl:template match="*[@level="file"]">

Однако для целей форматирования (отступа и т. Д.) Мне нужен узел, являющийся дочерним по отношению к узлу с таким же атрибутом, который будет обрабатываться иначе, чем его родительский. Так что-то вроде:

* * 1010

Есть идеи? Я надеюсь это имеет смысл. Спасибо!

Ответы [ 3 ]

1 голос
/ 09 ноября 2011

Используйте

<xsl:template match="*[@level='file' ]/*[@level='file']">

Этот шаблон соответствует любому элементу, строковое значение которого атрибутом level является "file" и является дочерним элементом элемента, строковое значение атрибута которого level равно "file"

Обратите внимание : не используются оси .. или parent:: или //, и это, вероятно, самый простой и точный шаблон соответствия.

1 голос
/ 09 ноября 2011

Соответствует любому узлу, чей родитель имеет тот же атрибут @level, что и я, и мой атрибут @level = 'file'

<xsl:template match="*[../@level=./@level][./@level='file']">
 ...
</xsl:template>
0 голосов
/ 09 ноября 2011

Я думаю, что вы ищете что-то вроде

<xsl:apply-templates select="//*[@level='file' and parent::*/@level='file']" />

То есть выберите любой элемент, который имеет атрибут "level" в "file", а также имеет родительский элемент, который имеет "уровень "атрибут" файла ".После этого вы сможете использовать свой шаблон.Я не уверен, достаточно ли сложен синтаксис соответствия в шаблонах для той сложности, которую вы ищете;Я думаю, что подход, который я обычно использую, состоит в том, чтобы выбрать узлы, которые я ищу, и использовать совпадение в шаблонах только для очень простых различий.То, что яснее всего, может зависеть от того, как выглядит остальная часть вашего преобразования.

Я не уверен, что полностью понял ваш вопрос.

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