2

XSLTを初めて使用しますが、次の問題を解決できません。

私はこのようなxmlファイルを持っています:

<root>
    <subset>
        <e id="A"></e>
        <e id="C"></e>
    </subset>

    <data>
        <info id="A" order="3" name="ANode"></info>
        <info id="B" order="4" name="BNode"></info>
        <info id="C" order="1" name="CNode"></info>
        <info id="D" order="2" name="DNode"></info>
    </data>
</root>

そして私はこれを作りたい:

<root>
    <newnode id="C" order="1" name="CNode"></newnode>
    <newnode id="A" order="3" name="ANode"></newnode>
</root>

ご覧のとおり、アイデアは、それぞれの情報を取得してIDのサブセットを「完成」させ、で指定された順序に従ってIDを並べ替えること<data>です。

<data>子ノードがたくさんあることに注意してください。

また、IDのサブセットから要素に関する情報を含むノードを分離しています。<data>これは、多くのサブセットがあり、「どこでも」情報を繰り返したくないためです。

前もって感謝します。

4

2 に答える 2

1

実際のデータで他に何をする必要があるかによって、サブセットをキーオフすることもできます。

<xsl:output indent="yes" />

<xsl:key name="subset" match="e" use="@id" />

<xsl:template match="/">
    <root>
    <xsl:for-each select="//info[count(key('subset',@id)[1]) &gt; 0]">
        <xsl:sort select="@order" data-type="number" />
        <newnode id="{@id}" order="{@order}" name="{@name}" />
    </xsl:for-each>
    </root>
</xsl:template>

于 2010-03-10T18:30:52.920 に答える