0

xpathノードをxslt変数の値として設定する方法を説明していただけますか。また、値を表示してから、パラメーターとしてJS Function. ご助力いただきありがとうございます。

4

2 に答える 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 に答える