【问题标题】:pretty_print option in tostring not working in lxmltostring 中的 pretty_print 选项在 lxml 中不起作用
【发布时间】:2023-03-17 15:37:02
【问题描述】:

我正在尝试使用 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 版本有问题吗?教程中逐字逐句的例子似乎很奇怪。

【问题讨论】:

    标签: python xml lxml


    【解决方案1】:

    字符串前面的b 标志表明它是byte string。要将其打印为 unicode 字符串(这是 Python 字符串的典型编码),您可以这样做:

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

    或者etree.tostring有一个标志可以让你设置编码,所以:

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

    任何一种方式都适合我。这里有更多关于Byte StringsStrings的信息

    【讨论】:

    • 有趣,这对我也有用。这只是他们文档中的错误吗? python 中的某些内容是否发生了变化,使得在以前不需要指定编码时需要指定编码?
    • @lanteau 我真的不知道。我没有那么多使用lxml,但是lxml 文档的另一部分显示etree.tostring 在给定method='text' 标志时返回bytes 对象,因此可能在较新版本中将其设置为默认值lxml?
    • 在 pip 上可用的最新版本中未修复,lxml==3.5.0
    猜你喜欢
    • 2020-03-14
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2016-07-16
    相关资源
    最近更新 更多