如何在XML解析中定位Image分支下的指定Value元素?
精准获取XML中
分支下的标签值
需求:解析XML文件时,需要获取<Image>分支下对应的<Value>标签内的值,但文件中存在多个<Value>标签,当前代码返回了所有<Value>,仅需<Image>下的目标值。
XML示例
<Report xmlns=http://schemas.microsoft.com> <AutoRefresh>0</AutoRefresh> <DataSources> <DataSource Name="DataSource2"> <Value>SourceAlpha</Value> <rd:SecurityType>None</rd:SecurityType> </DataSource> </DataSources> <Image Name="Image36"> <Source>Embedded</Source> <Value>NeedThisValue!!!</Value> <Sizing>FitProportional</Sizing> </Image> </Report>
原代码
from bs4 import BeautifulSoup with open(filepath, 'r') as f: data = f.read() Bs_data = BeautifulSoup(data, "xml") b_unique = Bs_data.find_all('Value') print(b_unique)
原运行结果
[<Value>SourceAlpha</Value>, <Value>NeedThisValue!!!</Value>]
解决方案
方法1:先定位<Image>标签,再获取子节点<Value>
通过find()先找到目标<Image>标签,再在该标签范围内查找<Value>,实现精准定位:
from bs4 import BeautifulSoup with open(filepath, 'r') as f: data = f.read() Bs_data = BeautifulSoup(data, "xml") # 定位到Image标签 image_tag = Bs_data.find('Image') # 获取Image标签下的Value文本 target_value = image_tag.find('Value').text print(target_value)
方法2:使用CSS选择器直接定位
利用BeautifulSoup支持的CSS选择器,通过select_one()直接选取<Image>下的<Value>节点:
from bs4 import BeautifulSoup with open(filepath, 'r') as f: data = f.read() Bs_data = BeautifulSoup(data, "xml") # 用CSS选择器定位Image下的Value target_value = Bs_data.select_one('Image > Value').text print(target_value)
运行结果
两种方法都会输出:
NeedThisValue!!!
内容的提问来源于stack exchange,提问作者user1982778
相关产品推荐
相关产品推荐

