0

私はこのようなxmlを持っています:

<root>
<row>
    <col name="col1">&lt;root&gt;&lt;row&gt;&lt;col name=&quot;COL_NAME_1&quot;&gt;col_value_1&lt;/col&gt;;&lt;/row&gt;&lt;/root&gt;</col>
    <col name="col2">&lt;root&gt;&lt;row&gt;&lt;col name=&quot;COL_NAME_2&quot;&gt;col_value_2&lt;/col&gt;;&lt;/row&gt;&lt;/root&gt;</col>
</row></root>

col1 からエスケープされたコレクションを取得し、その行を反復処理する必要があります。exsl:node-set 関数を使用しています。これが私の単純化されたxslです:

<xsl:template match="/">
<xsl:variable name="collection" select="exsl:node-set(./root/row/col[@name='col1'])" disable-output-escaping="yes" />
<xsl:for-each select="($collection)/root/row">
    <!-- ... -->
</xsl:for-each></xsl:template>

xsl:value-of 関数を使用して変数 $collection から値を正しく読み取ることができますが、行がないかのように反復することはできません。私が間違っていることは何ですか?

4

2 に答える 2

1

この XML の作成者が、root や row などの要素を col 要素内に表示することを望んでいた場合、山かっこはエスケープされませんでした。それらはエスケープされているため、ここには構造はなく、テキストのみです。テキストから構造を取得する操作は、解析と呼ばれます。XSLT 3.0 には、テキストを解析してツリー構造を作成する関数 parse-xml() があります。以前のバージョンにはありませんが、ベンダーが拡張機能を提供している場合や、独自の拡張機能を作成できる場合があります。

于 2015-03-31T21:55:08.340 に答える
0

関数はnode-set()解析しません。変数は、1つの子$collectionを持つ一時ドキュメント ノードで構成されるノード セットcolです。

parse()Saxon には、他の XSLT プロセッサと同様に、必要な機能を実行するという拡張関数があります。これを純粋な XSLT でコーディングしようとする試みもいくつか見ましたが、適切な実装があるかどうかはわかりません。

于 2015-03-31T14:53:36.050 に答える