如何使用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 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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容