Получить значения элемента в xsl:variable
Пожалуйста, прости мое незнание XSLT, я довольно новичок в этом.
Использование saxon xslt 2.0: я пытаюсь получить один элемент из переменной xsl:, который выглядит так при применении <xsl:copy-of select="$type">
:
<type>
<label>Book</label>
<id>book</id>
</type>
Пытался получить доступ только к элементу id - я пытался:
<xsl:copy-of select="$type/id">
<xsl:copy-of select="$type[2]">
<xsl:value-of select="$type/id">
<xsl:value-of select="$type[2]">
Также попробовал это и несколько вариантов, а также
<xsl:value-of select="$type[name()='id']"/>
И попытался изменить тип данных
<xsl:variable name="type" as="element">
В XSLT 2.0 node-set() манипуляции не применяются.
Я ищу подробное описание того, как правильно получить доступ к элементам xsl:variable, и был бы рад узнать, что я использую все это неправильно, есть лучший способ. Спасибо за ваши идеи и усилия.
@ martin-honnen При добавлении:
<xsl:variable name="test1">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
<TEST1><xsl:copy-of select="$test1/type/id"/></TEST1>
<xsl:variable name="test2" as="element()">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
<TEST2><xsl:copy-of select="$test2/id"/></TEST2>
Я получаю результат:
<TEST1/>
<TEST2/>
2 ответа
Если у вас есть
<xsl:variable name="type">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
тогда вам нужно, например, <xsl:copy-of select="$type/type/id"/>
скопировать id
элемент как type
Переменная связана с временным узлом документа, содержащим type
элемент узла с id
узел дочернего элемента.
Или использовать
<xsl:variable name="type" as="element()">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
затем <xsl:copy-of select="$type/id"/>
работает, так как теперь переменная связана с type
элемент узла.
Вот полный пример с моими предложениями:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<xsl:variable name="test1">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
<TEST1><xsl:copy-of select="$test1/type/id"/></TEST1>
<xsl:variable name="test2" as="element()">
<type>
<label>Book</label>
<id>book</id>
</type>
</xsl:variable>
<TEST2><xsl:copy-of select="$test2/id"/></TEST2>
</xsl:template>
</xsl:stylesheet>
вывод
<TEST1>
<id>book</id>
</TEST1>
<TEST2>
<id>book</id>
</TEST2>
Чтобы получить доступ к значению элемента, просто правильно укажите XPath, то есть type/id
<xsl:value-of select="type/id" />