脚本无法访问内部标记中的内容

时间:2013-07-17 13:33:28

标签: python xml lxml

我正在尝试解析一个大的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()

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

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

请告诉我我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

此XPath表达式:./URL/product/text()会在product标记内找到URL标记内的文字,但不会在product标记内找到product标记内的文字1}}标记位于URL标记内。

另请考虑使用./URL/product/product/text()//product/text()