加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用XPATH从XML文档中选择不同的值?

发布时间:2020-12-16 07:40:58 所属栏目:百科 来源:网络整理
导读:如何使用XPATH仅选择 XML文档的不同元素?我尝试使用’distinct-values’功能,但是由于某种原因不起作用. XML类似于以下内容: catalogproductsize12/sizeprice1000/pricerating1/rating/productproductsize10/sizeprice1000/pricerating1/ratingyear2010/ye
如何使用XPATH仅选择 XML文档的不同元素?我尝试使用’distinct-values’功能,但是由于某种原因不起作用.

XML类似于以下内容:

<catalog>

<product>
<size>12</size>
<price>1000</price>
<rating>1</rating>
</product>

<product>
<size>10</size>
<price>1000</price>
<rating>1</rating>
<year>2010</year>
</product>

</catalog>

所以我想得到的是所有产品元素的不同子代的列表.在给定的例子中,它将是 – 尺寸,价格,等级,年份
我的xpath类似于:distinct-values(catalog / product / *)

在XPath 2.0中:
distinct-values(/*/*/*/name(.))

在XPath 1.0中,这不能使用单个XPath表达式生成.

使用XSLT 1.0:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
   <xsl:for-each select=
   "/*/*/*[not(../following::*/*
                       [not(name() = name(current()))]
               )
           ]">
     <xsl:value-of select="concat(name(),' ')"/>
   </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

当对所提供的XML文档应用此转换时,将生成所需的结果:

size price rating year

一个更高效的XSLT 1.0转换,使用键:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:key name="kpchildByName"
  match="product/*" use="name()"/>

 <xsl:template match="/">
   <xsl:for-each select=
   "/*/*/*
         [generate-id()
         =
          generate-id(key('kpchildByName',name())[1])
          ]">
     <xsl:value-of select="concat(name(),' ')"/>
   </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读