2

我是 XPath 的新手,所以我需要一些帮助来解决这个问题。我有一个像这样的 XML 文件:

<items>
    <item>
        <brandName>Brand 1</brandName>
        <productTypes>
            <productType>Type 1</productType>
            <productType>Type 3</productType>
        </productTypes>
    </item>
    <item>
        <brandName>Brand 1</brandName>
        <productTypes>
            <productType>Type 2</productType>
            <productType>Type 3</productType>
        </productTypes>
    </item>
    <item>
        <brandName>Brand 2</brandName>
        <productTypes>
            <productType>Type 4</productType>
            <productType>Type 5</productType>
        </productTypes>
    </item>
</items>

我试图找出一种方法来获取特定品牌的所有独特产品类型。例如,“Brand 1”的所有唯一 productType 将输出“Type 1”、“Type 2”、“Type 3”

我一直在谷歌搜索没有太多运气。任何帮助,将不胜感激!

4

1 回答 1

3

这有效:

(/items/item[brandName='Brand 1']/productTypes/productType)[not(text()=preceding::*)]

它是如何工作的:第一个(...)得到所有的productTypebrandName='Brand 1'。此时我有一个productType节点列表。现在我选择当前节点之前的节点中不包含节点文本的节点。

在python中试过:

n = libxml2dom.parseString(xml)
[x.textContent for x in n.xpath("(/items/item[brandName='Brand 1']/productTypes/productType)[not(text()=preceding::*)]")]
>>> [u'Type 1', u'Type 3', u'Type 2']
于 2012-06-19T17:37:33.180 回答