首选Python XML处理器

时间:2011-06-21 22:34:00

标签: python xml

与Python一起使用的首选XML处理器是什么?

有些选择

  • minidom
  • PyXML
  • ElementTree的
  • ...

编辑:我需要能够阅读文档并操纵它们。我还需要漂亮的打印功能。

4 个答案:

答案 0 :(得分:9)

lxml就在那里。

以下是一些示例代码:

import textwrap
from os.path import join

from lxml import etree

# string to Element
tree = etree.XML(textwrap.dedent('''
  <foo_tag>
    foo text
    <bar_tag some_attr='ok'>bar text</bar_tag>
  </foo_tag>
  '''))
print 'root text: ' , tree.text
print 'pretty_print: '
print etree.tostring(tree, pretty_print=True)
print 'last child: (%s) (%s)' % (tree[-1].tag, tree[-1].text)
print

# filename to ElementTree
tree = etree.parse('some_file.xhtml')

def recurse(root, depth):
  line = '  ' * depth + root.tag + ' {%s}' % ', '.join(root.attrib.keys())
  if root.text:
    line += ' <%s>' % root.text.strip()
  print line
  for child in root:
    recurse(child, depth + 1)
print 'recurse tree:'
recurse(tree.getroot(), 0)
print

print 'find title: ', tree.findtext('html/head/title')
print 'find title again: ', tree.find('html').find('head').find('title').text

您可以使用some_file.xhtml进行测试:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <metadata/>
  <html>
    <head>
      <title style="bold">Page Title</title>
      <span>Here's a <a href="google.com">link</a> to somewhere.</span>
    </head>
    <body bgcolor="#ffffff">Hello, World!</body>
  </html>
</root>

答案 1 :(得分:0)

我可以为ElementTree担保 - 它不是一个特别完整的XML实现。它的主要优点是DOM树对象的使用简单。它们的行为类似于常规的pythonic对象(序列和dicts),即使它们的实际实现比外观可能暗示的要复杂一些。在所有XML框架中,ET是您可以用来快速完成基本任务的框架。

另一方面,如果您的XML大多是非常传统的东西,它可以很好地阅读和格式化您投入的任何文档。

恼人的限制(四个月前似乎没有修复)是对XML命名空间的缺乏Xpath的支持。

总之,它适用于基本用途。它可以让你快速上手。 XML专家会发现它缺乏。

答案 2 :(得分:-1)

我是BeautifulSoup的忠实粉丝......我发现它是最容易使用的解析器!

答案 3 :(得分:-2)

如果您只是解析文档而不是操纵它。我建议使用SAX Parser for Python

http://docs.python.org/library/xml.sax.reader.html