XSL: получение переменных данных без exslt: node-set - PullRequest
4 голосов
/ 12 января 2011

Использование родной библиотеки 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" />

Ответы [ 2 ]

6 голосов
/ 12 января 2011
<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 голосов
/ 03 ноября 2012

Можно позвонить 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" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...