我正在尝试解析一个大的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()
脚本在标签内打印文本,但无法在标签内打印文本。
我认为是因为标签名称相同。
请告诉我我做错了什么?
答案 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()
。