输入以下内容
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>1</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>2</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>1</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>2</type>
</item>
现在想获得以下输出
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>1</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>2</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a9</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>1</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>2</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<type>3</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a9</vaue>
</list>
<type>3</type>
</item>
对于每个类型为1的项目,如果列表中包含名称“ a”,则希望创建一个新项目。但是想避免重复。 通过两步过程就可以实现此输出。首先创建具有重复项的项目,然后进行单独的键匹配以删除重复项。
有没有一种方法可以一步实现,而不是创建重复项然后过滤重复项
答案 0 :(得分:1)
这只是一个分组问题。此样式表:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="item-by-vaue" match="item[type=1]" use="list[name='a']/vaue"/>
<xsl:template match="node()|@*" name="copy">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<xsl:for-each
select="item[type=1]
[count(.|key('item-by-vaue',list[name='a']/vaue)[1])=1]">
<item>
<xsl:apply-templates select="list[name='a']"/>
<type>3</type>
</item>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
使用您的输入样本输出:
<root>
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>1</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>2</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>1</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<list>
<name>b</name>
<vaue>b5</vaue>
</list>
<list>
<name>c</name>
<vaue>c9</vaue>
</list>
<list>
<name>d</name>
<vaue>d66</vaue>
</list>
<type>2</type>
</item>
<item>
<list>
<name>a</name>
<vaue>a1</vaue>
</list>
<type>3</type>
</item>
</root>
请注意:,您输入的示例与您指定的规则不匹配您的预期输出:没有vaue
字符串值为'a9'
的元素。< / p>