使用Python和lxml检索XML父子属性

时间:2014-02-01 09:53:38

标签: python xml xpath lxml

我正在尝试使用Python / lxml中的XPATH处理XML文件。

我可以使用以下代码在树的特定级别提取值:

file_name = input('Enter the file name, including .xml extension: ') # User inputs file name
print('Parsing ' + file_name)

from lxml import etree

parser = etree.XMLParser()
tree = etree.parse(file_name, parser)

r = tree.xpath('/dataimport/programmelist/programme')
print (len(r))

with open(file_name+'.log', 'w', encoding='utf-8') as f:        
   for r in tree.xpath('/dataimport/programmelist/programme'):
        progid = (r.get("id"))
        print (progid)

它按预期返回值列表。我还想返回'child'的值(它存在的地方),但我无法弄清楚(我只能将它作为一个单独的列表工作,但我需要保持它们之间的链接)。

注意:我会将值写入日志文件,但由于我没有成功地将所有内容都写出来,我还没有添加“写出”代码。

这是XML的结构:

<dataimport dtdversion="1.1">
   <programmelist>
      <programme id="eid-273168">
         <imageref idref="img-1844575"/>

如何让Python返回id + idref?

我之前使用的示例中有名称空间,但此文件没有。

1 个答案:

答案 0 :(得分:1)

由于xpath()方法返回树,您可以再次使用xpath获取所需的idref列表:

for r in tree.xpath('/dataimport/programmelist/programme')
    progid = r.get("id")
    ref_list = r.xpath('imageref/@idref')
    print progid, ref_lis