0

ルートタグ内のすべての要素を次のようにループする必要があります

<?xml version="1.0" encoding="UTF-8"?>    
<root>
<mijnFamilyPack>
    <rt>id123</rt>
    <rt>id345</rt>
    <rt>id084</rt>
    <INPORTING>NO</INPORTING>
    <id>345</id>
</mijnFamilyPack>
</root>

私はfor-eachを作成して、すべての「rt」要素の値を取得します。しかし、私は最初のcvalueだけでできます。

<xsl:for-each select="/root/mijnFamilyPack/">
<xsl:value-of select="rt"/>
</xsl:for-each>

'rt'値だけを取得するにはどうすればよいですか?

4

3 に答える 3

3

ノードのインスタンスは1つしかないmijnFamilyPackため、1回ループし、最初のノード<xsl:for-each select="/root/mijnFamilyPack/">の値を出力しています。rt

rtノードもに入れfor-eachて、現在のノードの値を次のように出力することをお勧めします。

 <xsl:for-each select="/root/mijnFamilyPack/rt">
       <xsl:value-of select="."/>
 </xsl:for-each>

複数のノードが存在する可能性があると思われる場合はmijnFamilyPack、ネストされたループを使用して、最初に反復mijnFamilyPackし、次にノードrt内で反復しmijnFamilyPackます。

 <xsl:for-each select="/root/mijnFamilyPack/">
    <xsl:for-each select="rt">
       <xsl:value-of select="."/>
    </xsl:for-each>
 </xsl:for-each>
于 2012-11-22T15:43:30.043 に答える
2

mijnFamilyPackノードのセットではなく、ノードを選択していますrt

<xsl:for-each select="/root/mijnFamilyPack/rt">
   <xsl:value-of select="."/>
</xsl:for-each>

for-eachただし、代わりに実際のテンプレートを使用することを検討してください。

<xsl:template match="/root/mijnFamilyPack/rt">
   <xsl:value-of select="."/>
</xsl:template>
于 2012-11-22T15:42:58.807 に答える
1

Odedが言ったように、rt要素を一致させるためにテンプレートを使用する必要があります。For-eachここでは使用しないでください(このスレッドの回答も参照してください:Forループとapply-templates

このXSLTをソースXMLに適用する場合:

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

<xsl:template match="/">
    <list>
        <xsl:apply-templates select="//rt"/>
    </list>
</xsl:template>

<xsl:template match="rt">
    <rt>
        <xsl:value-of select="."/>
    </rt>
</xsl:template>

</xsl:stylesheet>

目的の出力が得られます。

<?xml version="1.0" encoding="UTF-8"?>
<list>
<rt>id123</rt>
<rt>id345</rt>
<rt>id084</rt>
</list>
于 2012-11-22T19:30:33.030 に答える