使用 XSL 在 XML 中获取不同的节点值 [英] Get distinct node values in XML with XSL
本文介绍了使用 XSL 在 XML 中获取不同的节点值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何使用 XSL 在我的 XML 中找到所有不同的名称?
How can I find all the distinct names in my XML by using XSL?
<NewDataSet>
<SearchResult>
<Name>HAREDIN </Name>
<Surname>FEIMI</Surname>
<FathersName>QAMIL</FathersName>
<Birthdate>1949-06-13T00:00:00+02:00</Birthdate>
<CustomerSegment>Individe Standart </CustomerSegment>
</SearchResult>
<SearchResult>
<Name>HARMENAK</Name>
<Surname>BADEJAN</Surname>
<FathersName>VARAHAN </FathersName>
<Birthdate>1943-10-02T00:00:00+02:00</Birthdate>
<CustomerSegment>Individe Standart </CustomerSegment>
</SearchResult>
<SearchResult>
<Name>HARMENAK</Name>
<Surname>BADEJAN</Surname>
<FathersName>VARAHAN </FathersName>
<Birthdate>1943-10-02T00:00:00+02:00</Birthdate>
<CustomerSegment>Individe Standart </CustomerSegment>
</SearchResult>
</NewDataSet>
我不会像这样输出所有不同的名称节点:
I wont all the distinct name node, th output like thse:
<root>
<Name>HAREDIN </Name>
<Name>HARMENAK</Name>
</root>
推荐答案
这个 XSLT 1.0 转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="kNamesByVal" match="Name" use="."/>
<xsl:template match="/">
<t>
<xsl:copy-of select=
"*/*/Name[generate-id()
=
generate-id(key('kNamesByVal', .)[1])
]
"/>
</t>
</xsl:template>
</xsl:stylesheet>
应用于提供的 XML 文档时,产生所需的正确结果:
<t>
<Name>HAREDIN </Name>
<Name>HARMENAK</Name>
</t>
不使用密钥的 XSLT 2.0 解决方案:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<t>
<xsl:for-each-group select="*/*/Name" group-by=".">
<xsl:copy-of select="."/>
</xsl:for-each-group>
</t>
</xsl:template>
</xsl:stylesheet>
这篇关于使用 XSL 在 XML 中获取不同的节点值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文