Преобразуйте входной xml в выходной xml, используя xslt - PullRequest
0 голосов
/ 15 марта 2011

Входная XML-структура:

<Customer>
   <Order>
      <item>
        <name>ID</name>
        <value>11111</value>
      </item>
   </Order>
   <Order>
      <item>
        <name>ID</name>
        <value>11111</value>
      </item>
   </Order>
    <Order>
      <item>
        <name>ID</name>
        <value>22222</value>
      </item>
   </Order>
   <Order>
      <item>
        <name>ID</name>
        <value>33333</value>
      </item>
   </Order>
</Customer>

Выходные данные должны быть:

<Customer>
   <Order>
      <item>
        <name>ID</name>
        <value>11111</value>
      <item>
   </Order>
   <Order>
      <item>
        <name>ID</name>
        <value>11111</value>
      </item>
   </Order>
</Customer>
<Customer>
    <Order>
      <item>
        <name>ID</name>
        <value>22222</value>
      </item>
   </Order>
</Customer>
<Customer>
    <Order>
      <item>
        <name>ID</name>
        <value>33333</value>
      </item>
   </Order>
</Customer>

Здесь /Customer/<Order/item/value придет динамически.Пожалуйста, дайте решение для этой трансформации.

1 Ответ

1 голос
/ 15 марта 2011

Эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:key name="kOrderByValue" match="Order" use="item/value"/>
    <xsl:template match="Customer">
        <xsl:for-each select="Order[count(.|key('kOrderByValue',
                                                item/value
                                            )[1]
                                    ) = 1]">
            <Customer>
                <xsl:apply-templates select="key('kOrderByValue',
                                                 item/value
                                             )"/>
            </Customer>
        </xsl:for-each>
    </xsl:template>
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Вывод:

<Customer>
    <Order>
        <item>
            <name>ID</name>
            <value>11111</value>
        </item>
    </Order>
    <Order>
        <item>
            <name>ID</name>
            <value>11111</value>
        </item>
    </Order>
</Customer>
<Customer>
    <Order>
        <item>
            <name>ID</name>
            <value>22222</value>
        </item>
    </Order>
</Customer>
<Customer>
    <Order>
        <item>
            <name>ID</name>
            <value>33333</value>
        </item>
    </Order>
</Customer>

Примечание : группировка Customer '* Order children по value.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...