/ / XSL: Отримати змінні дані без exslt: node-set - php, xslt

XSL: Отримати змінні дані без exslt: node-set - php, xslt

Використання власного бібліотеки XSL у PHP. Чи можна отримати значення вузла всередині змінної без необхідності викликати його через exslt: node-set кожен раз .... це довго і потворно.

<xsl:variable name="mydata">
<foo>1</foo>
<bar>2</bar>
</xsl:variable>


<!-- How currently being done -->
<xsl:value-of select="exslt:node-set($mydata)/foo" />


<!-- I want to be able to do this -->
<xsl:value-of select="$mydata/foo" />

Відповіді:

6 за відповідь № 1
<xsl:variable name="mydata">
<foo>1</foo>
<bar>2</bar>
</xsl:variable>

<!-- How currently being done -->
<xsl:value-of select="exslt:node-set($mydata)/foo" />

<!-- I want to be able to do this -->
<xsl:value-of select="$mydata/foo" />

Якщо вміст змінної статично визначений, то він є можливий отримати доступ до нього з виразу XPath без використання xxx:node-set() функція розширення.

Приклад:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:variable name="mydata">
<foo>1</foo>
<bar>2</bar>
</xsl:variable>

<xsl:template match="/">
<xsl:value-of select=
"document("")/*/xsl:variable[@name="mydata"]/bar"/>
</xsl:template>
</xsl:stylesheet>

коли це перетворення застосовується до будь-якого XML-документа (не використовується), створюється потрібний, правильний результат:

2

0 для відповіді № 2

Можна дзвонити node-set тільки один раз. Перетворити змінну в тип набору вузлів:

<!-- do it once at the beginning -->
<xsl:variable name="mydatans" select="exslt:node-set($mydata)" />
<!-- anytime you need: -->
<xsl:value-of select="$mydatans/foo" />