-3

我对 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

4 回答 4

3

我可以推荐lxml库:

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

在这里,我使用xpath来查找所有“项目”标签。

你也可以写:

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

如果仅在指定路径中找到“项目”很重要。

于 2013-10-30T08:17:53.880 回答
2

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

使用 BS4:

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

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

于 2013-10-30T08:09:24.060 回答
1

您应该找到大量有关 XML 的信息。这是一个非常流行的标准。您应该首先熟悉文档对象模型 (DOM) 级别 1。大多数图书馆都以此为基础。

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

lxml——当谈到用 Python 处理 XML 时,它几乎是事实上的标准。但坦率地说,文档很烂。但只要花点时间和精力,你就会到达那里。

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

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

希望这能让你开始。祝你好运!

于 2013-10-30T08:23:59.423 回答
1

在 python 中使用lxml包,因为 lxml 支持xpath对 xml 文件进行查询非常有帮助。从 XML 文件处理大数据的速度很快

from lxml import etree
tree = etree.parse(XML_FILE_PATH)
root = self.tree.getroot()

text从 xml 的节点获取:

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

于 2013-10-30T09:00:23.230 回答