Skip to main content
 首页 » 编程设计

python之使用 BeautifulSoup 或 minidom 解析 XML

2025年05月04日56artech

我有类似这样的 XML

#filename sample.xml 
<tag> 
<tag1> 
<tag2 property="something"/> 
<tag2 property="something1"/> 
<tag2 property="something2">value</tag2> 
<tag2 property="something3"> 
<tag3> 
<tag4 data="data1"/> 
<tag4 data="data2"/> 
</tag3> 
</tag2> 
</tag1> 
</tag> 

我想提取'data1''data2'。我正在尝试这样的事情:

f=open('sample.xml') 
fdata=f.read() 
xmldata=BeautifulSoup(fadata) 
print (xmldata.tag.tag1.tag2.tag3.tag4["data"]) 

但是它抛出一个错误:

AttributeError: 'NoneType' object has no attribute 'tag4' 

请您参考如下方法:

print 函数因多个 tag2 而失败。一种解决方案是使用 .findAll('tag2') 检索所有标签。

这是一个工作示例:

#! /usr/bin/python 
 
from bs4 import BeautifulSoup 
f=open('sample.xml') 
fdata=f.read() 
xmldata=BeautifulSoup(fdata) 
 
alltags2 = xmldata.tag.tag1.findAll('tag2') 
 
for tag2 in alltags2: 
    alltags3 = tag2.findAll('tag3') 
    for tag3 in alltags3: 
        alltags4 = tag3.findAll('tag4') 
        for tag4 in alltags4: 
            print "The data I got was :\"%s\"" % (tag4["data"]) 

亲切的问候,