2

次の XSLT コードがあります。

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:exslt="http://exslt.org/common"
  xmlns:msxml="urn:schemas-microsoft-com:xslt" xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon"
  xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes"  xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath"
  xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings"
  xmlns:DesignetExtender ="urn:DesignetExtender"
  xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets"
  exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath 
  Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets DesignetExtender ">

....

<xsl:variable name="test">
<xsl:value-of select="exslt:node-set($HtmlPermulations)" disable-output-escaping="yes"/>
</xsl:variable>

HtmlPermulations の値は次のとおりです。

&lt;root&gt;&lt;item&gt;Stationcar
                                        &lt;/item&gt;&lt;item&gt;Cabriolet
                                        &lt;/item&gt;&lt;item&gt;SUV&lt;/item&gt;&lt;item&gt;Stationcar
                                         Cabriolet&lt;/item&gt;&lt;item&gt;Stationcar
                                         SUV&lt;/item&gt;&lt;item&gt;Cabriolet
                                         SUV&lt;/item&gt;&lt;item&gt;Stationcar
                                         Cabriolet
                                         SUV&lt;/item&gt;&lt;/root&gt;

しかし、このfor-eachループで使用しようとすると:

<xsl:for-each select="$test/root/item">
 <xsl:value-of select="."/>
</xsl:for-each>

次のエラー メッセージが表示されます。

パス式で結果ツリー フラグメントを使用するには、まず msxsl:node-set() 関数を使用してノード セットに変換します。

誰でも助けることができますか?

4

1 に答える 1

1

ノードのツリーに解析したいマークアップを含む文字列があるようです。このmsxsl:node-set関数はそれを行いません。結果ツリーのフラグメントを取得し、それをノード セットに変換します。はdisable-output-escaping、最終的なシリアル化ステップでのみ使用され、変数内では使用されないため、役に立ちません。したがって、純粋な XSLT 1.0 でできることは、2 つのスタイルシートを作成することだけです。1 つ目は disable-output-escaping を使用して変数の内容を出力し、2 つ目はその出力を処理できます。または、XSLT プロセッサが拡張機能をサポートしているかどうか、またはマークアップの文字列をノードのツリーに解析する拡張機能を実装できるかどうかを確認する必要があります。

于 2014-03-17T09:50:56.620 に答える