【问题标题】:Why is beautifulsoup altering the format of my xml?为什么beautifulsoup 会改变我的xml 格式?
【发布时间】:2016-06-24 05:56:13
【问题描述】:

当我导入和导出 xml 而不对 xml 进行任何修改时,输出会发生显着变化。

我正在使用 beautifulsoup,这是我正在使用的代码示例。

soup = BeautifulSoup(open('/Users/bdon/envtest.xml', 'r'), 'lxml')

with open('/Users/bdon/envmod.xml', "w") as f:
    f.write(soup.prettify())

这是我要导入的 xml:

<?xml version="1.0"?>
<config>
  <apps>
    <app name="apache-common">
      <key name="max" value="400"/>
    </app>
    <app name="epci">
      <key name="instance.type" value="apachecommon"/>
      <key name="aoverride.enabled" value="true"/>
    </app>

还有输出:

<?xml version="1.0"?>
<html>
 <body>
  <config>
   <apps>
    <app name="apache-common">
     <key name="max" value="400">
     </key>
    </app>
    <app name="epci">
     <key name="instance.type" value="apachecommon">
     </key>
     <key name="aoverride.enabled" value="true">
     </key>
    </app>

问题:

  • html和body标签添加了吗?
  • 现在,键名的末尾去掉了“/”,并在其后添加了结束键标记。

为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 您确实对 XML 进行了修改...您在上面调用了 prettify()

标签: python xml beautifulsoup


【解决方案1】:

如果您使用'html.parser',那么BeautifulSoup 不会改变您的代码格式。

演示

from bs4 import BeautifulSoup

content = '''
<?xml version="1.0"?>
<config>
  <apps>
    <app name="apache-common">
      <key name="max" value="400"/>
    </app>
    <app name="epci">
      <key name="instance.type" value="apachecommon"/>
      <key name="aoverride.enabled" value="true"/>
    </app>
    </apps>
    </config>'''

soup = BeautifulSoup(content, "html.parser")
print(soup)

输出

<?xml version="1.0"?>
<config>
<apps>
<app name="apache-common">
<key name="max" value="400"></key>
</app>
<app name="epci">
<key name="instance.type" value="apachecommon"></key>
<key name="aoverride.enabled" value="true"></key>
</app>
</apps>
</config>

【讨论】:

  • 我错过了什么吗?这看起来完全改变了。打印时格式全部消失。
  • 使用 html.parser 会将标签的大小写更改为小写。
【解决方案2】:

在构造函数中指定了lxml HTML 解析器。将构造函数调用改为:

soup = BeautifulSoup(open('/Users/bdon/envtest.xml', 'r'), 'xml')

The documentation on parsing XML is here.

【讨论】:

猜你喜欢
  • 2021-04-28
  • 2013-03-23
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2015-08-20
相关资源
最近更新 更多