<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
将动态出现。
请任何人为这种转变提供解决方案。
答案 0 :(得分:1)
此样式表:
<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
个value
个孩子进行分组。