忽略重复值xml 1.0
我花了几个小时来研究这个方法的所有解释,以前使用过效果很好的方法,但这次看不出我的错误是什么。我在下面尝试了两种不同的方法。只能使用xml 1.0。这是我的第一篇帖子,如果我犯了错误,我会提前道歉忽略重复值xml 1.0,xml,xslt,grouping,unique-values,Xml,Xslt,Grouping,Unique Values,我花了几个小时来研究这个方法的所有解释,以前使用过效果很好的方法,但这次看不出我的错误是什么。我在下面尝试了两种不同的方法。只能使用xml 1.0。这是我的第一篇帖子,如果我犯了错误,我会提前道歉 1 = 1 1 = 1 2 = 1,2,3 2 = 1,2,3 2 = 1,2,3 ******在这里测试******** <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
1 = 1
1 = 1
2 = 1,2,3
2 = 1,2,3
2 = 1,2,3
******在这里测试********
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:key name="webnoB" match="mow_web" use="web_number" />
<xsl:key name="webnoC" match="mow_webs" use="mow_web/web_number" />
<xsl:template match="order">
塞西达:/
网络NOA:
**************
secidB:/
网站编号B:
******在这里测试********
如果您想在每个
press\u mow
中列出不同的web\u编号
值,则必须在密钥定义和用法中包含press\u mow
标识符
由于您的输入没有唯一的值来标识press\u mow
节点,因此需要使用generate-id()
考虑以下样式表:
XSLT1.0
</xsl:template>
应用于输入示例,结果将是:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="wn" match="mow_web" use="concat(web_number, '|', generate-id(ancestor::press_mow))" />
<xsl:template match="/order">
<root>
<xsl:for-each select="press_mow">
<section id="{mow_section_id}">
<xsl:for-each select="mow_webs/mow_web[count(. | key('wn', concat(web_number, '|', generate-id(ancestor::press_mow)))[1]) = 1]">
<number>
<xsl:value-of select="web_number"/>
</number>
</xsl:for-each>
</section>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
1.
1.
1.
2.
3.
1.
2.
3.
1.
2.
3.
请发布您希望得到的准确结果(作为代码)。感谢您的快速回复,我将尝试一下,并向您通报我的进度。谢谢你,这工作做得很好。我必须承认我不理解代码或它是如何工作的-有可能解释密钥和生成id代码吗?或者推荐一个我可以了解更多关于这是如何工作的地方,我已经在互联网上搜索过了,但我的头脑还没有完全清醒过来。。。非常感谢您的帮助。generate-id()
函数为输入XML中的每个节点返回一个唯一的id。该键将web\u number
的值与其祖先的id组合在一起press\u mow
-因此它使我们能够在每个press\u mow
中选择唯一的值。如果没有这一点,Muenchian方法将在整个文档中选择唯一的值。
</xsl:template>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="wn" match="mow_web" use="concat(web_number, '|', generate-id(ancestor::press_mow))" />
<xsl:template match="/order">
<root>
<xsl:for-each select="press_mow">
<section id="{mow_section_id}">
<xsl:for-each select="mow_webs/mow_web[count(. | key('wn', concat(web_number, '|', generate-id(ancestor::press_mow)))[1]) = 1]">
<number>
<xsl:value-of select="web_number"/>
</number>
</xsl:for-each>
</section>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<root>
<section id="1">
<number>1</number>
</section>
<section id="1">
<number>1</number>
</section>
<section id="2">
<number>1</number>
<number>2</number>
<number>3</number>
</section>
<section id="2">
<number>1</number>
<number>2</number>
<number>3</number>
</section>
<section id="2">
<number>1</number>
<number>2</number>
<number>3</number>
</section>
</root>