为什么beautifulsoup会改变我的xml格式?

时间:2016-03-09 17:37:12

标签: python xml beautifulsoup

当我导入和导出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标签已添加?
  • 键名现在从末尾剥离'/',之后添加了关闭键标记。

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

2 个答案:

答案 0 :(得分:2)

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

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

The documentation on parsing XML is here

答案 1 :(得分:0)

如果您使用'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>