使用 xslt 将输入 xml 转换为输出 xml

发布于 2024-10-22 04:09:12 字数 1537 浏览 0 评论 0 原文

输入 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/ 将动态出现。 请任何人为这种转变提供解决方案。

Input XML structure:

<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>

Output should be :

<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>

Here the /Customer/<Order/item/value will come dynamically.
Please anyone give a solution for this transformation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

知你几分 2024-10-29 04:09:12

此样式表:

<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>

注意:按CustomerOrder子项进行分组。

This stylesheet:

<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>

Output:

<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>

Note: grouping Customer's Order children by value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文