Используйте XSLT для группировки по одному элементу в XML - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь создать группу на основе одного элемента "h_order_num" в XML.

ORGINAL XML выглядит как

<?xml version="1.0" encoding="UTF-8"?>
<saphana>
   <row>
      <h_brand_code>DDH</h_brand_code>
      <h_brand_country>USA</h_brand_country>
      <h_order_num>0400000631</h_order_num>
   </row>
   <row>
      <h_brand_code>DDF</h_brand_code>
      <h_brand_country>France</h_brand_country>
      <h_order_num>0400000631</h_order_num>
   </row>
   <row>
      <h_brand_code>DDG</h_brand_code>
      <h_brand_country>Germany</h_brand_country>
      <h_order_num>0400000634</h_order_num>
   </row>
</saphana>

Это то, что я пытаюсь достичь

<?xml version="1.0" encoding="UTF-8"?>
<saphana>
   <row>
      <Ordernumber>
         <Value>0400000631</Value>
         <LineItems>
            <h_brand_code>DDH</h_brand_code>
            <h_brand_country>USA</h_brand_country>
         </LineItems>
         <LineItems>
            <h_brand_code>DDF</h_brand_code>
            <h_brand_country>France</h_brand_country>
         </LineItems>
      </Ordernumber>
   </row>
   <row>
      <Ordernumber>
         <Value>0400000634</Value>
         <LineItems>
            <h_brand_code>DDG</h_brand_code>
            <h_brand_country>Gernamy</h_brand_country>
         </LineItems>
      </Ordernumber>
   </row>
</saphana>

Пожалуйста, помогите мне написать xslt для этой трансформации

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019
**Please Check 2.0**

        <xsl:template match="saphana">
        <xsl:copy>
            <xsl:for-each-group select="row" group-by="h_order_num">
                <xsl:copy>
                    <Ordernumber>
                        <Value>
                            <xsl:value-of select="current-grouping-key()"/>
                        </Value>
                        <xsl:for-each select=" current-group()">
                            <LineItems>
                                <h_brand_code><xsl:value-of select="child::h_brand_code"/></h_brand_code>
                                <h_brand_country><xsl:value-of select="child::h_brand_country"/></h_brand_country>
                            </LineItems>
                        </xsl:for-each>
                    </Ordernumber>
                </xsl:copy>
            </xsl:for-each-group>
        </xsl:copy>
    </xsl:template>
0 голосов
/ 25 апреля 2019

Пожалуйста, проверьте этот код:

<xsl:key name="loc1" match="row" use="h_order_num"/>
<xsl:template match="saphana">
    <xsl:copy>
        <xsl:for-each select="row[count(. | key('loc1', h_order_num)[1]) = 1]">
            <xsl:copy>
                <Ordernumber>
                    <value>
                        <xsl:value-of select="h_order_num"/>
                    </value>
                    <xsl:for-each select="key('loc1', h_order_num)">
                        <LineItems>
                            <h_brand_code>
                                <xsl:value-of select="h_brand_code"/>
                            </h_brand_code>
                            <h_brand_country>
                                <xsl:value-of select="h_brand_country"/>
                            </h_brand_country>
                        </LineItems>
                    </xsl:for-each>
                </Ordernumber>
            </xsl:copy>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...