Xpath根据另一个节点值选择节点值

时间:2015-01-08 04:11:36

标签: xml xpath

我是Xpath的新手。

假设我有一个xml目录将商品导入电子商店:

<categories>
    <category id="26">Jackets</category>
    <category id="27">Jeans</category>
    <category id="28">Sweaters</category>
    <category id="29">Shirts</category>
    ...
</categories>

<goods>
    <good id="123">
        <categoryId>26</categoryId>
        <label>D&G</label>
        <color>Black</color>
        <size>M, XL</size>
    </good>
    ...
<goods>

目录的第一部分是商品类别列表,第二部分是商品清单。 每个商品都有<categoryId>,其值等于<category>列表中某些<categories>的“id”属性。

从上面的代码我需要得到这样的好的描述:类别:夹克;标签:D&amp; G;颜色:黑色;大小:M,XL。

可以直接从<good>上下文中选择

标签颜色尺寸,这不是问题所在。但对于类别,我只有一个26,它与<categories>上下文中 Jackets 类别的ID相匹配。

所以我的目标是使用<category id="26">Jackets</category>节点的值选择<categoryId>26</categoryId>节点的值。

非常感谢。

2 个答案:

答案 0 :(得分:1)

要选择与category为123的good相关联的@id,请使用此XPath:

//categories/category[@id = //goods/good[@id='123']/categoryId]

答案 1 :(得分:0)

假设您已经从26元素检索了值categoryId,那么XPath将使用&#34;夹克&#34;在它中将是:

//categories/category[@id = "26"]

根据您使用的语言,您可能需要使用字符串连接合并,或者在XSLT中,您可以直接在表达式中使用变量:

//categories/category[@id = $categoryId]

(但是,在XSLT中,更好的方法是使用密钥)。