这让我困惑了一段时间,我无法弄清楚这里发生了什么。这是原始的XML文件:
<?xml version="1.0" encoding="UTF-8" ?>
<book>
<meta>
<title>Some Title</title>
<creator>Another Author</creator>
<language>en-US</language>
...
</meta>
<chapter>
...
</chapter>
</book>
然后我读了这个文件:
with open(filename) as f :
soup = BeautifulSoup(f);
print(soup.root)
奇怪的是,抛出以下内容:
<html><body><book>
<meta/>
<title>Some Title</title>
<creator>Some Author</creator>
<language>en-US</language>
...
为什么哦,为什么汤中的<meta>
标签是空的,当它不在原始XML文件中时? (我可以发誓两周前这个工作有效,我也可以发誓我没有触及脚本。我确实对XML文件进行了一些细微的改动,但我没有看到相关性。)
答案 0 :(得分:0)
您正在HTML解析器中打开XML文件。 BeautifulSoup尝试修复它期望的HTML结构。
相反,请使用XML解析器,或使用BeautifulSoup in XML mode:
soup = BeautifulSoup(f, 'xml')
为此,必须安装lxml
。
lxml
本身就是一个优秀的XML库。您还可以使用Python附带的ElementTree库; lxml
基于相同的API但具有更多功能。