我想使用BeautifulSOup解析xml,但会导致输出不正确。
file.xml:
<?xml version="1.0" ?>
<opening name="value1" >
<element name="value1.1"/>
<element name="value1.2">
<element name="1.2.1"/>
</element>
<element name="value1.3">
<element name="value1.3.1"/>
</element>
</opening>
使用以下代码:
>>> a=open('file.xml').read()
>>> import BeautifulSoup
>>> s= BeautifulSoup.BeautifulSoup(a)
>>> print s.prettify()
我得到以下输出:
<?xml version='1.0' encoding='utf-8'?>
<opening name="value1">
<element name="value1.1">
</element>
<element name="value1.2">
</element>
<element name="1.2.1">
</element>
<element name="value1.3">
</element>
<element name="value1.3.1">
</element>
</opening>
为什么将所有元素显示为打开标记的子元素? 如何正确解析此文件?
我试过用过 s = BeautifulSoup.BeautifulStoneSoup(a) 但也没有用。
答案 0 :(得分:1)
BeautifulSoup
主要是一个HTML
解析器,可以最好地处理格式错误的HTML。有一些XML库,例如lxml
我强烈推荐 - 试试。
一个例子:
import lxml.etree
xml = """<?xml version="1.0" ?>
<opening name="value1" >
<element name="value1.1"/>
<element name="value1.2">
<element name="1.2.1"/>
</element>
<element name="value1.3">
<element name="value1.3.1"/>
</element>
</opening>
"""
r = lxml.etree.fromstring(xml)
r.xpath('//element/@name')
# ['value1.1', 'value1.2', '1.2.1', 'value1.3', 'value1.3.1']
答案 1 :(得分:0)
美丽的汤3需要一个特殊的参数才能让标签正确关闭。您需要BeautifulStoneSoup构造函数的selfClosingTags参数。使用类似的东西:
soup = BeautifulStoneSoup(markup, selfClosingTags=['element'])