我使用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在其他方面有效,也可能会出现问题。