0

我正在尝试解析一个大的 xml 文件。

它具有以下结构。

    < merchandiser >
    <header></header>
    <product>
    <name></name>
    <URL>
        <info>
        </info>
        <product>
       </product>
    </URL>
    </product>

    ............

    <product>
    <name></name>
    <URL>
        <info>
        </info>
        <product>
       </product>

    </URL>
    </product>
    </merchandiser>

我正在使用 python-lxml 库中的 iter.parse() 。

    for event , element in etree.iterparse(xmlfile,tag='product'):

        if element.tag=="product" and event == "end":
            if element.findall("..")[0].tag=='merchandiser':
                        print element.xpath('./URL/product/text()')
                        print element.xpath('./URL/info/text()')
        element.clear()

该脚本打印标签内的文本,但无法打印标签内的文本。

我认为它是因为相同的标签名称。

请告诉我我做错了什么?

4

2 回答 2

1

for 循环遍历所有product元素并调用clear()它们,这会删除所有文本和子元素。由于您正在打印end外部product元素的事件,因此您在打印之前删除了内部product元素的文本。

于 2013-07-17T13:52:05.087 回答
0

此 XPath 表达式:将在标签./URL/product/text()内的标签内找到文本,但不会在标签内的标签内找到标签。productURLproductproductURL

也考虑使用./URL/product/product/text()or//product/text()代替。

于 2013-07-17T13:54:05.393 回答