使用xslt将输入xml转换为输出xml 输入XML结构: 身份证件 11111 身份证件 11111 身份证件 22222 身份证件 33333 输出应为: 身份证件 11111 身份证件 11111 身份证件 22222 身份证件 33333

使用xslt将输入xml转换为输出xml 输入XML结构: 身份证件 11111 身份证件 11111 身份证件 22222 身份证件 33333 输出应为: 身份证件 11111 身份证件 11111 身份证件 22222 身份证件 33333,xslt,Xslt,下面是此样式表的/Customer/: <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 sele

下面是此样式表的
/Customer/:

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

身份证件
11111
身份证件
11111
身份证件
22222
身份证件
33333

注意:按
值对
客户的
订单
子项进行分组
您是否意识到请求的输出是无效的XML(您需要单个文档元素)?是否有一个元素应该包装该内容(例如,
)?@Mads-Hansen:关于输出验证,请注意,对于
xml
序列化方法,有两个选项,来自:
xml
output方法将结果树作为格式良好的xml外部通用解析实体输出。如果结果树的根节点有一个元素节点子节点,没有文本节点子节点,那么实体也应该是格式良好的XML文档实体。“+1很好的解决方案。我在发布我的答案时没有注意到订单的分组。删除我的答案。@Mads Hansen:谢谢。重新发布上面的注释,因为我认为它有一些价值。
<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>