使用python解析和打印XML

时间:2013-10-30 08:04:48

标签: python xml

我对XML很新,我想知道如何在python中解析,排序和打印val1到val4?通过我的研究,我发现xml.domxml.etree被大量使用,但我无法找到正确的函数来解析XML树并打印出我需要的东西。

<a>
  <b>
    <c>
      <d>
        <item> val1 </item>
        <item> val2 </item>
        <item> val3 </item>
        <item> val4 </item>
      </d>
    </c>
  </b>
</a>

4 个答案:

答案 0 :(得分:3)

我可以推荐lxml lib:

from lxml import etree
xml = etree.XML(...)
for e in xml.xpath('//item'):
    print e.text

在这里,我使用xpath查找所有“item”-tags。

你也可以写:

for e in xml.xpath('/a/b/c/d/item'):
    print e.text

如果只在指定的路径中找到“item”很重要。

答案 1 :(得分:2)

我最近制作了一个小型python程序来显示某些XML文件中的一些信息。我发现使用BeautifulSoup 4使得XML非常容易解析。您可以从链接的网站下载源代码并自行安装,也可以按照文档使用bs4pip安装软件包easy_install

使用BS4:

soup = BeautifulSoup(xmlFileORString);
for item in soup.a.b.c.d.find_all('item'):
    print(item.string)

编辑:也可以为Python 2.7编译BS4,代码几乎完全相同。

答案 2 :(得分:1)

您应该找到有关XML的大量信息。这是一个非常受欢迎的标准。您应该首先熟悉Document Object Model (DOM) Level 1。大多数图书馆都是以此为基础的。

有一些非常流行的python库可用。您选择哪一个取决于您的个人需求。

lxml - 几乎是使用Python进行XML处理的事实上的标准。但坦率地说,文档很糟糕。但是只要花一点时间和精力,你就会到达那里。

beautifulsoup - BS的主要目标是 XML处理。它的主要目的是处理可能混乱的输入(想想屏幕抓取)。它虽然有一个非常性感的API,但对你来说可能就足够了。

minidom - 包含在标准库中,我认为这是一个很大的优点。它为您提供了一种加载/编写XML文档的简单方法,并公开了上述DOM 1级规范。没有更多,没有更少。对于大多数小型/简单项目来说,这已经足够了。但是,如果您需要更高级的XML功能,如XPATH,XIincludes或XSL,或者只是速度,请查看lxml

希望这是你的开始。祝你好运!

答案 3 :(得分:1)

在python中使用lxml包,因为lxml支持xpath,这对于在xml文件上触发查询非常有帮助。从XML文件

处理大数据的速度很快
from lxml import etree
tree = etree.parse(XML_FILE_PATH)
root = self.tree.getroot()

从xml的节点获取text

nodes =  tree.findall("//item")
text = [node.text for node in nodes]

您将获得列表[1,2,3,4],之后您可以使用sorted(text)

对结果列表进行排序

要获取元素属性,可以使用 - :

假设<item id="2" name="abc">1</item>

entries = tree.xpath("//item[@id='2']")

您将获得{'id':2, 'name':'abc'}

中的所有属性,即entries