2

次の XML ファイルがあります:-

<?xml version="1.0" encoding="UTF-8"?>
<viewentries>
    <viewentry position="1">
        <entrydata columnnumber="0">
            <text>Text1</text>
        </entrydata>
        <entrydata columnnumber="1">
            <text>Text2</text>
        </entrydata>
        <entrydata columnnumber="2">
            <text>Text3</text>
        </entrydata>
    </viewentry>
    <viewentry position="2">
        <entrydata columnnumber="0">
            <text>Text1</text>
        </entrydata>
        <entrydata columnnumber="1">
            <text>Text2</text>
        </entrydata>
        <entrydata columnnumber="2">
            <text>Text3</text>
        </entrydata>
    </viewentry>
</viewentries>

XSL スタイルシートを使用して、この XML ファイルを次のように変換する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<records>
    <record position="1" col0="Text1" col1="Text2" col2="Text3"/>
    <record position="2" col0="Text1" col1="Text2" col2="Text3"/>
</records>

どこから始めればよいかわかりません。

各要素は、位置属性を介してプルする要素に変換する必要がありますが、それぞれを属性名にする必要があり、それぞれの子属性を属性値にする必要があります。

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

4

1 に答える 1

2

この変換:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
  <records>
    <xsl:apply-templates/>
  </records>
 </xsl:template>

 <xsl:template match="viewentry">
  <record>
    <xsl:apply-templates/>
  </record>
 </xsl:template>

 <xsl:template match="entrydata">
  <xsl:attribute name="col{@columnnumber}">
    <xsl:value-of select="text"/>
  </xsl:attribute>
 </xsl:template>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<viewentries>
    <viewentry position="1">
        <entrydata columnnumber="0">
            <text>Text1</text>
        </entrydata>
        <entrydata columnnumber="1">
            <text>Text2</text>
        </entrydata>
        <entrydata columnnumber="2">
            <text>Text3</text>
        </entrydata>
    </viewentry>
    <viewentry position="2">
        <entrydata columnnumber="0">
            <text>Text1</text>
        </entrydata>
        <entrydata columnnumber="1">
            <text>Text2</text>
        </entrydata>
        <entrydata columnnumber="2">
            <text>Text3</text>
        </entrydata>
    </viewentry>
</viewentries>

必要な正しい結果が生成されます。

<records>
   <record col0="Text1" col1="Text2" col2="Text3"/>
   <record col0="Text1" col1="Text2" col2="Text3"/>
</records>

説明:

テンプレート、xsl:attribute命令、AVT の適切な使用。

于 2012-06-15T12:50:04.617 に答える