与Python一起使用的首选XML处理器是什么?
有些选择
编辑:我需要能够阅读文档并操纵它们。我还需要漂亮的打印功能。
答案 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