Php XSL:Get不带exslt:node集的变量数据

Php XSL:Get不带exslt:node集的变量数据,php,xslt,Php,Xslt,在PHP中使用本机XSL库。是否可以在变量中获取节点值,而不必每次通过exslt:node set调用它。。。。它又长又丑 <xsl:variable name="mydata"> <foo>1</foo> <bar>2</bar> </xsl:variable> <!-- How currently being done --> <xsl:value-of select="exslt:

在PHP中使用本机XSL库。是否可以在变量中获取节点值,而不必每次通过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" />

1.
2.
将此转换应用于任何XML文档(未使用)时,将生成所需的正确结果

<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>
2

只需调用一次
节点集即可。将变量转换为节点集类型:

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


问得好,+1。当不需要
xxx:node-set()
时,请参阅我的答案,以获得完整的代码示例。:)使用这项技术,我发现了两件可能被证明很重要的额外事情。文档(“”)不引用包含的样式表,因此您不能将变量真正放置在包含的某个位置。第二,如果需要组合多个内联构建的节点集,则不能使用变量,但可以在自定义命名空间中使用多个元素将它们与xsl构造分离。@Flack:您的答案只是部分错误。如果变量的内容不是静态的(即,它是根据xslt指令生成的),则必须应用
xxx:node-set()
,子节点才能被XPath表达式访问。
<!-- do it once at the beginning -->
<xsl:variable name="mydatans" select="exslt:node-set($mydata)" />
<!-- anytime you need: -->
<xsl:value-of select="$mydatans/foo" />