如何使用xpath查找不同的数据?

时间:2012-03-04 00:19:19

标签: xml xslt xpath

下面是我的xml

<products>
    <product>
        <productid>1001</productid>
        <remarks>
            <title>This is remarks text of 1001</title>
        </remarks>
    </product>
    <product>
        <productid>1002</productid>
        <remarks>
            <title>This is remarks text of 1002</title>
        </remarks>
    </product>
    <product>
        <productid>1001</productid>
        <remarks>
            <title>This is remarks text of 1001</title>
        </remarks>
    </product>
    <product>
        <productid>1001</productid>
        <remarks>
            <title>This is another remarks text of 1001</title>
        </remarks>
    </product>
</products>

我需要像下面那样放

  1. 从自己的remarks/title
  2. 中获取不同的productid
  3. 需要取出remark productid

    1001 {

    Productid:1001 备注:这是备注文本1001

    Productid:1001 备注:这是1001的另一个备注文本

3 个答案:

答案 0 :(得分:2)

此转化

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

 <xsl:key name="kProdById" match="product" use="productid"/>

 <xsl:template match=
  "product
    [generate-id()
    =
     generate-id(key('kProdById', productid)[1])
    ]
  ">
  <xsl:apply-templates 
     select="key('kProdById', productid)/remarks"/>
 </xsl:template>

 <xsl:template match="remarks">
  <xsl:value-of select=
   "concat('Productid : ', ../productid,
           ' Remark:', title, '&#xA;')"/>
 </xsl:template>

 <xsl:template match="product"/>
</xsl:stylesheet>

应用于提供的XML文档

<products>
    <product>
        <productid>1001</productid>
        <remarks>
            <title>This is remarks text of 1001</title>
        </remarks>
    </product>
    <product>
        <productid>1002</productid>
        <remarks>
            <title>This is remarks text of 1002</title>
        </remarks>
    </product>
    <product>
        <productid>1001</productid>
        <remarks>
            <title>This is remarks text of 1001</title>
        </remarks>
    </product>
    <product>
        <productid>1001</productid>
        <remarks>
            <title>This is another remarks text of 1001</title>
        </remarks>
    </product>
</products>

生成想要的正确结果

Productid : 1001 Remark:This is remarks text of 1001
Productid : 1001 Remark:This is remarks text of 1001
Productid : 1001 Remark:This is another remarks text of 1001
Productid : 1002 Remark:This is remarks text of 1002

解释:使用 Muenchian method for grouping

答案 1 :(得分:0)

我使用Muenchean方法将产品ID和备注组合在一起。网上有很多关于如何做到这一点的信息。

查看此问题xslt-distinct-elements-and-grouping是否为您提供了任何线索。

答案 2 :(得分:0)

使用xpath 2.0我们可以尝试这样:

distinct-values(/products/product[productid='1001']/remarks/title)