0

XSL を使用して、空白で区切られたリストの要素を反復処理する最も簡単な方法を見つけようとしています。次の XML データ ファイルがあるとします。

<?xml version="1.0" encoding="UTF-8"?>
<data>
    <!-- this list has 6 items -->
    <list>this is a list of strings</list>
</data>

リスト要素は、次のように XML スキーマで定義できます。

<xs:element name="list" type="strlist" />

<xs:simpleType name="strlist">
    <xs:list itemType="xs:string" />
</xs:simpleType>

XSL 仕様がこの構成体を直接サポートしているかどうかはわかりませんが、XML スキーマで使用できるのでサポートすべきだと思います。

どんな助けでも大歓迎です。

4

2 に答える 2

1

XSLT 2.0 はこれを直接サポートしています。スキーマを意識した変換では、次のように記述できます。

<xsl:for-each select="data(list)">
  ...
</xsl:for-each>

要素「リスト」がリスト型のスキーマで定義されている場合、これはトークンを反復処理します。

しかし、スキーマなしで書くこともできます

<xsl:for-each select="tokenize(list, '\s+')">...</xsl:for-each>

XSLT 1.0 では、再帰的な名前付きテンプレートを使用する必要があります。www.exslt.org で、スタイルシートにコピーする市販の str:tokenize テンプレートを見つけることができます。

于 2013-07-30T06:49:22.543 に答える