2014-02-12 3 views
0

Прошу простить мое незнание XSLT. Я довольно новичок в этом.Получить значения элементов в xsl: переменная

Использование 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 набором узлов) манипуляция, кажется (не применять.

Я ищу подробное описание того, как правильно обращаться к элементам xsl: variable, а также будет рад найти, что я использую все это неправильно, это лучший способ. Спасибо за ваши идеи и усилия.

@ мартеновского-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/> 

ответ

1

Если у вас есть

<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> 
+0

обновленным вопрос –

+0

Ну для первого образца вы не следовали моему предложению. Второй должен работать и делать для меня, я отредактировал свой ответ с полным образцом, показывающим оба пути и вывод, который я получаю с Saxon 9. Если у вас все еще есть проблемы, отправьте минимальный, но полный образец, позволяющий нам воспроизвести проблему. –

+0

Спасибо, Мартин. Я обновил вышеуказанный и принятый ответ, поскольку он должен работать так, как вы показали. –

0

Чтобы получить доступ значения элемента, просто указать XPath правильно что type/id

<xsl:value-of select="type/id" /> 
Смежные вопросы