lxml中tostring的pretty_print选项不起作用

19 投票
1 回答
9064 浏览
提问于 2025-04-18 00:20

我正在尝试在XML中使用tostring方法,以便将我的XML转换成一个“好看”的字符串。lxml网站上的示例是这样的:

>>> import lxml.etree as etree
>>> root = etree.Element("root")
>>> print(root.tag)
root
>>> root.append( etree.Element("child1") )
>>> child2 = etree.SubElement(root, "child2")
>>> child3 = etree.SubElement(root, "child3")
>>> print(etree.tostring(root, pretty_print=True))
<root>
  <child1/>
  <child2/>
  <child3/>
</root>

但是我运行这些完全相同的代码后,输出却是:

b'<root>\n  <child1/>\n  <child2/>\n  <child3/>\n</root>\n'

我安装的lxml版本是不是有问题?感觉教程中的逐字示例怎么会不管用呢。

1 个回答

30

在字符串前面加上 b 这个标志,表示它是一个 字节字符串。如果你想把它打印成常见的unicode字符串(这就是Python字符串的标准编码),可以这样做:

print(etree.tostring(root,pretty_print=True).decode())

另外,etree.tostring 也有一个选项,可以让你设置编码,所以你可以这样做:

print(etree.tostring(root,pretty_print=True,encoding='unicode'))

这两种方法对我来说都可以。这里还有更多关于 字节字符串字符串 的信息。

撰写回答