xpath
ノードをxslt
変数の値として設定する方法を説明していただけますか。また、値を表示してから、パラメーターとしてJS Function
. ご助力いただきありがとうございます。
質問する
795 次
2 に答える
0
サンプル入力 XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<child>
<trial>test</trial>
</child>
</root>
現在のノードの XPath をインライン JS 関数に渡すモデル コード:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:js="urn:js">
<xsl:output method="xml" indent="yes"/>
<msxsl:script language="JScript" implements-prefix="js">
<![CDATA[
function test(something)
{
//code here
}
]]>
</msxsl:script>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="trial">
<xsl:copy>
<xsl:variable name="xpath">
<xsl:for-each select="ancestor-or-self::*">
<xsl:value-of select="name()"/>
<xsl:if test="not(position()=last())">
<xsl:value-of select="'/'"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:apply-templates select="js:test($xpath)"/> <!--Passed value $xpath to funciton test-->
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
戻り値を持つ
return (something);
出力します:
<?xml version="1.0" encoding="utf-8"?>
<root>
<child>
<trial>root/child/trial</trial>
</child>
</root>
于 2013-01-26T10:22:00.027 に答える
0
XPath 式は値ではないため、変数にバインドできません。もちろん、XPath 式を文字列に入れることもできます。XSLT には、文字列に保持された XPath 式を実行する標準的な方法はありませんが、多くの実装には、それを行うための拡張関数 (xx:evaluate() など) があります。
問題を解決するために使用しようとしている手法ではなく、解決しようとしている問題を説明するのに役立ちます。次に、代替の、おそらくより良いアプローチを提案できます。
于 2013-01-26T09:38:21.780 に答える