BeautifulSoup XML仅打印第一行



我使用BeautifulSoup4(And-lxml)来解析XML文件,出于某种原因,当我打印汤时,它只打印第一行:

from bs4 import BeautifulSoup
f = open('xmlDoc.xml', "r")
soup = BeautifulSoup(f, 'xml')
print soup.prettify()
#>>> <?xml version="1.0" encoding="utf-8"?>

知道为什么它没有抓住所有东西吗?

更新:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Data Junction generated file.
Macro type "1000" is reserved. -->
<djmacros>
  <macro name="Test" type="5000" value="TestValue">
    <description>test</description>
  </macro>
  <macro name="AnotherTest" type="0" value="TestValue2"/>
  <macro name="TestLocation" type="1000" value="C:RandomLocation">
    <description> </description>
  </macro>
<djmacros>

文件位置在EOF:

>>> soup = BeautifulSoup("", 'xml')
>>> soup.prettify()
'<?xml version="1.0" encoding="utf-8">n'

或者内容无效xml:

>>> soup = BeautifulSoup("no <root/> element", 'xml')
>>> soup.prettify()
'<?xml version="1.0" encoding="utf-8">n'

我在使用一个有效的XML文件时遇到了同样的问题。问题是XML文件是用UTF-8和BOM编码的。

我发现通过打印原始内容:

content = open(path, "r").read()
print(content)

我得到了(请看这个帖子:在我的源文件的开头有什么符号?):

<?xml version="1.0" encoding="utf-8"?>

根据J.F.Sebastion的回答,XML无效。

您的最终标签不正确:

<djmacros>

正确的标签是:

</djmacros>

您可以使用XML验证器对此进行确认。例如http://www.w3schools.com/xml/xml_validator.asp

如果编码是UTF-8-BOM而不是UTF-8,则即使XML在其他方面有效,也可能会出现问题。

最新更新