【问题标题】:Parsing XML of different formats using Python使用 Python 解析不同格式的 XML
【发布时间】:2012-01-12 22:37:04
【问题描述】:

我正在编写一个 python 类来解析 XML 并提取标签名称及其值。到目前为止,我只是将 XML files 传递给我的班级并使用 ElementTree 解析它。

我不可避免地希望能够将各种 XML 格式传递给类,因此不仅是文件,还可能是 XML 字符串或来自 URL 的 XML。

我不确定解决此问题的最佳方法是什么。我正在考虑编写一个单独的类或 def 来将所有 XML 信息转换为单一格式,例如字符串。然后让我的解析类设置为接受 XML 字符串进行解析。

如果有人对如何最好地解决这个问题有任何建议,那就太好了,如何做到这一点会更好:)。

谢谢。

【问题讨论】:

  • 你想得到什么?不同格式的 XML 文件可能只是意味着完全不同的东西......
  • “编写一个 Python 类来解析 XML”。真的吗?为什么? Python 有许多 XML 解析器。为什么要写另一个?
  • @S.Lott 因为它还做其他事情 :)
  • “它也做其他事情”。通常是个坏主意。大多数人使用现有的解析器并向其中添加“其他东西”。一个重要的设计原则是“关注点分离”。如果将解析与“其他事物”分开,那么解析问题就解决了。这些“其他东西”是什么?

标签: python xml-parsing


【解决方案1】:

使用LXML。它可以从字符串、文件或 URL 中解析 XML,开箱即用。

from lxml import etree
from cStringIO import StringIO

xml = """<foo><bar/> baz!</foo>"""

# parse from string
etree.fromstring(xml)

# parse from file-like; in this case, StringIO
s = StringIO(xml)
etree.parse(s)

# parse from URL
etree.parse("http://example.com/somefile.xml")

【讨论】:

  • 谢谢大家,这就是我所追求的。
【解决方案2】:

我不知道您为什么要通过构建自定义类来解析 xml。它们是 Python 中可用的许多 xml 解析器,例如 Beautiful Souplxml。您可以在 lxml 中使用 xpath 表达式或 css 表达式。

解析来自 url 或文件的 xml 响应

import lxml
from lxml import etree
et = etree.parse(your xml file or your url)
value = et.xpath("xpath expression")
print value

【讨论】:

  • 感谢您的回复,我的问题似乎写得不好。我不是在编写自己的解析器,正如我提到的,我使用的是 ElementTree (xml)。我只是想知道处理不同格式的 xml 的首选方法是什么。 larsmans,覆盖得很好。谢谢。
  • @user788462:“我的问题似乎写得不好”。请更新问题。不要在答案中添加 cmets 中的重要事实。
猜你喜欢
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
相关资源
最近更新 更多