Я в ситуации, когда я могу проверить только для дочернего узла, но мне нужно применить теги к бабушке дедушки этого дочернего узла.Как выбрать grandparent узла с помощью xslt
Я попытался с помощью:
<xsl:call-template name="grandparent" select="parent::parent::node()"/>
и:
<xsl:call-template name="grandparent" select="ancestor::node [@nameofgrandparentnode]"/>
Но ни работы.
Уровень узла grandparent не фиксирован, поэтому я полагаю, что я не могу использовать [@ level = #]. Любые идеи о том, как его выбрать, будут очень признательны.
EDIT: - Эта часть была размещена как новый вопрос:
xslt select grandparent node depending on an attribute value of its grandchild node
Выбор узла с использованием предложения снизу работал. Благодаря! Однако мне также нужно проверить атрибут дедушки или внука.
Я пробовал:
<xsl:template name"one" match="grandparentnode">
<Tag1>
<xsl:apply-templates select="parentNode" />
</Tag1>
</xsl:template>
<xsl:template name="two" match="grandparentnode[*/*/@grandchildattr='attrValue']">
<Tag2>
<xsl:apply-templates select="parentNode" />
</Tag2>
</xsl:template>
Однако шаблон "два" всегда получает называется, и "" всегда вставляется. Даже для узлов внуков, значение атрибута которых не равно «attrValue».
Я что-то упустил?
Хороший вопрос (+1). См. Мой ответ для ряда выражений XPath, которые вы можете использовать в инструкции ''. –
@highlightall Отредактированная часть не ясна. Пожалуйста, предоставьте полный (но как можно более короткий) XML-документ и полную таблицу стилей XSLT (опять же, как можно короче), которые воспроизводят вашу проблему. Предпочтительно спросите об этом в новом вопросе. –
@highlightall: Также 'Даже для узлов внуков, значение атрибута которых не равно 'attrValue', не может быть истинным с этим шаблоном' grandparentnode [*/*/@ grandchildattr = 'attrValue'] ' – 2010-09-10 19:21:41