Xml 使用XSLT可以防止连续相同值的输出吗?
是否可以使用XSL转换仅匹配XML文档中第一次出现的值 我想打印出f2中的每个值,但只打印f1内容的第一个实例 XML数据Xml 使用XSLT可以防止连续相同值的输出吗?,xml,xslt,Xml,Xslt,是否可以使用XSL转换仅匹配XML文档中第一次出现的值 我想打印出f2中的每个值,但只打印f1内容的第一个实例 XML数据 <doc> <datum> <f1>A</f1> <f2>Monday</f2> </datum> <datum> <f1>A</f1> <f2
<doc>
<datum>
<f1>A</f1>
<f2>Monday</f2>
</datum>
<datum>
<f1>A</f1>
<f2>Tuesday</f2>
</datum>
<datum>
<f1>B</f1>
<f2>Wednesday</f2>
</datum>
</doc>
I。这是众所周知的XSLT1.0:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="kDatumByF1" match="datum" use="f1"/>
<xsl:template match=
"datum[generate-id() = generate-id(key('kDatumByF1', f1)[1])]">
<xsl:value-of select="concat('
', f1)"/>
<xsl:apply-templates select="key('kDatumByF1', f1)/f2" mode="inGroup"/>
</xsl:template>
<xsl:template match="f2" mode="inGroup">
- <xsl:value-of select="."/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
<doc>
<datum>
<f1>A</f1>
<f2>Monday</f2>
</datum>
<datum>
<f1>A</f1>
<f2>Tuesday</f2>
</datum>
<datum>
<f1>B</f1>
<f2>Wednesday</f2>
</datum>
</doc>
II。XSLT 2.0解决方案,使用
-
这个答案绝对是深思熟虑和有用的。在我测试它并接受响应(工作周)之前可能需要一点时间。这句话是怎么说的?控制字符是故意的吗?这会创建(输出)一个由两个节点组成的序列——一个包含NL(新行)字符的文本节点,另一个是f1
节点。我能够使用XSLT 1.0获得巨大成功!非常感谢!这并不意味着XSLT2.0答案不起作用。我只是没有办法用xsltproc测试它。如果有一个与我如何打印它相同级别的文件呢?请让我知道,如果是适当的ettiquite张贴一个新的问题。
<doc>
<datum>
<f1>A</f1>
<f2>Monday</f2>
</datum>
<datum>
<f1>A</f1>
<f2>Tuesday</f2>
</datum>
<datum>
<f1>B</f1>
<f2>Wednesday</f2>
</datum>
</doc>
A
- Monday
- Tuesday
B
- Wednesday
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:for-each-group select="datum" group-by="f1">
<xsl:sequence select="'
', f1"/>
<xsl:apply-templates select="current-group()/f2"/>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="f2">
- <xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>