0

XML ドキュメントを変換する XSLT を作成しようとしていますが、グループ化に問題があります。1 つのオブジェクトの情報を引き出すのに問題はありませんが、xslt を使用して特定の要素をグループ化する方法がわかりません。グループ化のために xsl:for-each-group と xsl:key を試しましたが、変換に成功しませんでした。

入力:

<?xml version="1.0" standalone="yes"?>
<root>
    <node1>
        <ID>2</ID>
        <Name>ABCDE</Name>
        <Age>21</Age>
        <Skills>C++ C#</Skills>
        <worklocation>IN</worklocation>
        <designaton>Engineer I</designaton>
    </node1>
    <node2>
        <ID>3</ID>
        <Name>EFGH</Name>
        <Age>12</Age>
        <Skills>java</Skills>
        <worklocation>USA</worklocation>
        <designaton>Engineer II</designaton>
    </node2>
</root>

望ましい出力:

<root>
    <node1>
        <ID>2</ID>
        <Name>ABCDE</Name>
        <Age>21</Age>
        <workInfo>
            <Skills>C++ C#</Skills>
            <worklocation>IN</worklocation>
            <designaton>Engineer I</designaton>
        </workInfo>
    </node1>
    <node2>
        <ID>3</ID>
        <Name>EFGH</Name>
        <Age>12</Age>
        <workInfo>
            <Skills>java</Skills>
            <worklocation>USA</worklocation>
            <designaton>Engineer II</designaton>
        </workInfo>
    </node2>
</root>
4

1 に答える 1

2

IDテンプレートを使用します。W3Cの推奨事項を参照してください。

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

次に、ノードの各子ノードに一致する特定のテンプレートを適用し、その場でノードrootを作成しworkInfoます。

<xsl:template match="/root/*">
  <xsl:apply-templates select="ID|Name|Age" />
  <workInfo>
    <xsl:apply-templates select="Skills|worklocation|designaton" />
  </workInfo>
</xsl:template>
于 2013-01-26T15:44:44.133 に答える