/ / XSL:exsltなしで変数データを取得する:node-set - php、xslt

XSL:exsltなしで変数データを取得する:node-set - 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:node-set($mydata)/foo" />


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

回答:

回答№1は6
<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

回答№2の場合は0

電話することは可能です 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" />