使用 XSL 在 XML 中获取不同的节点值 [英] Get distinct node values in XML with XSL

查看:29
本文介绍了使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆