gpt4 book ai didi

python - 使用 ElementTree 在 Python 中解析 XML 的节点值

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:44 24 4
gpt4 key购买 nike

我有以下从网页解析的 XML:

<!--
Parts from the iGEM Registry of Standard Biological Parts
-->
<rsbpml>
<part_list>
<part>
<part_id>151</part_id>
<part_name>BBa_B0034</part_name>
<part_short_name>B0034</part_short_name>
<part_short_desc>RBS (Elowitz 1999) -- defines RBS efficiency</part_short_desc>
<part_type>RBS</part_type>
<release_status>Released HQ 2013</release_status>
<sample_status>In stock</sample_status>

我想提取一些值。

例如我想输出值 RBS来自 <part_type> .

我试过以下方法:

bb_xml_raw = urllib2.urlopen("http://parts.igem.org/cgi/xml/part.cgi?part=BBa_B0034")
self.parse = ET.parse(bb_xml_raw)
self.root = self.parse.getroot()

for part in self.root.findall('part_list'):
print part.find('part_type').text

但它不起作用,我得到:AttributeError: 'NoneType' object has no attribute 'text'

我做错了什么?

最佳答案

尝试改变

for part in self.root.findall('part_list'):

for part in self.root.find('part_list'):

findall返回所有匹配节点的列表。因此,第一行返回所有 part_list 的列表。节点。你的<part_list>节点没有任何带有标签 part_type 的子节点, 所以它返回 None , 你会得到你的错误。

如果你只有一个节点 part_list , 然后 find将返回实际节点,您可以使用正常的 for part in遍历其所有子节点的语法。

如果你有多个 part_list标签,那么你只需要一个嵌套的 for 循环:

for part_list in self.root.findall('part_list'):
for part in part_list:
etc.

编辑:考虑到这是一个 XY 问题——如果您正在寻找的确实是一个特定的子路径,您可以一次完成,就像这样:

all_parts = self.root.findall('part_list/part')
print all_parts[0].find('part_type').tag

关于python - 使用 ElementTree 在 Python 中解析 XML 的节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22378876/

24 4 0
文章推荐: javascript - Spider 能否读取
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com