1

Javaマップから変換されたXMLがあります。したがって、すべてのマップキーはノード名に変換されます。XML構造は以下のとおりです。

<map>
    <firstName>AAA</firstName>
    <firstName1>BBB</firstName1>
    <firstName2>CCC</firstName2>
    <firstName3>DDD</firstName3>
</map>

このXMLからデータを抽出して出力XMLを作成するfor-eachループを作成しようとしています。name()、local-name()、contains()など、利用可能なオプションのほとんどを試しましたが、うまくいくものを思い付くことができませんでした。インクリメンタルノード名は100以上までカウントされる可能性があるため、使用可能なオプションは何ですか。ループをコーディングする際の入力は非常に役立ちます。XSLT1.0を使用しています。

4

2 に答える 2

2

map最上位要素( )の子を選択する方法はたくさんあります。

/*/*

これにより、XMLドキュメントの最上位要素の子であるすべての要素が選択されます。

/*/*[starts-with(name(), 'firstName')]

これにより、名前が文字列で始まるすべての最上位要素の子要素が選択されます'firstName'

/*/*[starts-with(name(), 'firstName') 
   and floor(substring-after(name(), 'firstName')) = substring-after(name(), 'firstName')) ]

これにより、すべての最上位要素の子要素が選択されます。その名前は文字列で始まり、'firstName'この後の残りの部分文字列は整数です。

/*/*[starts-with(name(), 'firstName') 
   and translate(name(), '0123456789', '') = 'firstName')) ]

これにより、すべての最上位要素の子要素が選択されます。その名前は文字列で始まり、'firstName'その後の残りの部分文字列には数字のみが含まれます。

最後に、XPath 2.0(XSLT 2.0)では、正規表現を使用できます

/*/*[matches(name(), '^firstName\d+$')]
于 2013-03-26T01:51:47.130 に答える
1

これにより、すべての第1レベルの要素とその情報が選択され、必要に応じて使用できるようになります。

<xsl:for-each select="/*/*">
    <xsl:value-of select="local-name()"/>
    <xsl:value-of select="."/>
</xsl:for-each>
于 2013-03-26T03:23:32.340 に答える