2

他の質問を見てきましたが、何が間違っているのかよくわかりません。特定の結果のみを選択するパラメーターを渡したいのですが、パラメーターに問題があります。

html (IE の部分は無視してください)

<html>
<head>
<script>
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
  {
  xhttp=new XMLHttpRequest();
  }
else
  {
  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xhttp.open("GET",dname,false);
xhttp.send("");
return xhttp.responseXML;
}

function displayResult()
{
xml=loadXMLDoc("f.xml");
xsl=loadXMLDoc("xsl.xsl");
// code for IE
if (window.ActiveXObject)
  {
  ex=xml.transformNode(xsl);
  document.getElementById("example").innerHTML=ex;
  }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
  {
  xsltProcessor=new XSLTProcessor();
  xsltProcessor.importStylesheet(xsl);

  xsltProcessor.setParameter(null, "testParam", "voo");
  // alert(xsltProcessor.getParameter(null,"voc"));

  document.getElementById("example").innerHTML = "";

  resultDocument = xsltProcessor.transformToFragment(xml,document);
  document.getElementById("example").appendChild(resultDocument);
  }


}

</script>
</head>
<body onload="displayResult()">
    <li><u><a onclick="displayResult();" style="cursor: pointer;">test1</a></u></li>
<div id="example" />
</body>
</html>

XML

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="vocaroos.xsl"?>
<test>
    <artist name="Bert">
        <voo>bert1</voo>
    </artist>
    <artist name="Pet">
        <voo>pet1</voo>
    </artist>
</test>

xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:param name="testParam"/>
<xsl:template match="/">
  <html>
  <body >
  <h2>Titleee</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th>Teeeeeest</th>
    </tr>
    <xsl:for-each select="test/artist">
    <tr>
      <td><xsl:value-of select="$testParam"/></td>
    </tr>
    </xsl:for-each>
  </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet> 

結果はこちら(左)

結果

左側はこれが行うことで、右側は私が実際に望んでいることです。私はそれを期待していた

<xsl:value-of select="$testParam"/>

と同じことをします

<xsl:value-of select="voo"/>     (right outcome)

私は setParameter(null, "testParam", "voo"); をしているので html では、しかし何らかの理由で、xsl は select として "voo" を使用せず、代わりに "voo" を書き込みます。

私はさまざまなことを試してきましたが、何もうまくいきません。間違いはどこですか?

4

2 に答える 2

2

パラメータの値は文字列「voo」です。そのため、パラメータに適用されたxsl:value-ofは文字列「voo」を返します。XSLTプロセッサが「voo」を評価対象のXPath式として扱うことを期待する理由はありません。

パラメータの値が要素名であり、その名前の要素を選択する場合は、select = "* [name()=$testParam]"のように実行できます。より一般的なXPath式の場合は、xx:evaluate()拡張機能が必要になります。

于 2012-11-11T17:51:40.227 に答える
1

XSLT は 1.0 でも 2.0 でも動的評価を行いません。などの特定の拡張機能saxon:evaluateはこれを可能にしますが、使用できるかどうかは使用している XSLT エンジンによって異なります。XSLT 3.0 の推奨事項ではこれをネイティブに追加していますxsl:evaluateが、まだ 3.0 サポートを実装している XSLT エンジンはほとんどありません (saxon はその 1 つです)。

于 2012-11-11T06:40:31.947 に答える