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