python xml处理 - 如何遍历所有元素?

时间:2013-10-13 20:24:14

标签: python xml django

很抱歉提出这个问题,尽管有很多关于此问题的主题。但似乎现在没有一个满足我的需求。

我有一个xml文件。

<RestaurantList>
 <Restaurant id="100000">
  <Url>http://www.example.com/</Url>
  <Name>TestRestaurant</Name>
  <Description>
   <Text>This restaurant has a generous selection of fine wines</Text>
  </Description>
 </Restaurant>
 <Restaurant id="100001">
  <Url>http://www.example.com/</Url>
  <Name>TestRestaurant1</Name>
  <Description>
   <Text>This restaurant1 has a generous selection of fine wines</Text>
  </Description>
 </Restaurant>
</RestaurantList>

我想遍历所有元素并将其中的一些元素保存到db中。我在python中看到了lxmlxml等库。我试过这个:

import xml.etree.ElementTree as ET
file = ET.parse(settings.MEDIA_ROOT+'\\table.xml')
    rests = file.xpath('//Restaurant')
    for each in rests:
        self.stdout.write(each)

但我收到ElementTree has no object attribute xpath错误,

这样做的最佳方式是什么?提前谢天谢地

2 个答案:

答案 0 :(得分:1)

您的示例代码完全适用于Python 2.7.4和lxml 3.2.3,xpath()方法返回包含两个Restaurant元素的列表。如果您的XML解析器坚持XML文件格式正确,可能您提供的文件错误,或者文件以UTF-16等不可识别的编码保存。

要对此进行调试,请尝试打印open(settings.MEDIA_ROOT+'\\table.xml').read()并查看输出是否与有效的XML类似。如果对XML的正确性存在疑问,最好使用xmllint等独立工具对其进行验证。

答案 1 :(得分:0)

我这样做了:

datei = ET.parse(settings.MEDIA_ROOT+'\\table.xml')
    rests = datei.getroot()
    for each in rests:
      #do something with tags

非常感谢您的回答和观点..