首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从XML中提取数据的cElementTree

从XML中提取数据的cElementTree
EN

Stack Overflow用户
提问于 2018-04-11 15:11:59
回答 1查看 249关注 0票数 0

我有一个XML文件,其结构类似于以下内容:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<drugbank xmlns="http://www.drugbank.ca" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.drugbank.ca http://www.drugbank.ca/docs/drugbank.xsd" version="5.0" exported-on="2017-12-20">
    <drug type="biotech" created="2005-06-13" updated="2017-11-06">
        <drugbank-id primary="true">DB00001</drugbank-id>
        <drugbank-id>BTD00024</drugbank-id>
        <drugbank-id>BIOD00024</drugbank-id>
        <cas-number>138068-37-8</cas-number>
        <name>Lepirudin</name>
    </drug>
    <drug type="biotech" created="2005-06-13" updated="2017-11-06">
        <drugbank-id primary="true">DB00045</drugbank-id>
        <drugbank-id>BTD00054</drugbank-id>
        <drugbank-id>BIOD00054</drugbank-id>
        <cas-number>205923-56-4</cas-number>
        <name>Lyme disease vaccine (recombinant OspA)</name>
    </drug>
</drugbank>

我正在尝试利用Python3的cElementTree模块。我想提取这个XML中每种药物的名称,为此我编写了以下代码:

代码语言:javascript
复制
import xml.etree.cElementTree as ET

tree = ET.parse('fulldatabase.xml')
drugbank = tree.getroot()

print(drugbank.tag)

for drug in drugbank:
    print(drug.find('name').text)

我得到的错误是AttributeError: 'NoneType' object has no attribute 'text'

我也试过检查this,但是OP在其中写的答案对我无效。有没有办法让namecas-number从每种药物中提取出来?我已经尝试过一些组合,比如在for循环条件下删除findall(),但是即使在那时,事情也没有对我起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-11 15:24:19

除了名字你还需要什么吗?如果不这样就行了。您没有像文件的xml部分中定义的那样正确地使用<drugbank xmlns="http://www.drugbank.ca"命名空间

代码语言:javascript
复制
for drug in drugbank.iter('{http://www.drugbank.ca}name'):
    print drug.text

Lepirudin
Lyme disease vaccine (recombinant OspA)

以下是获取所需元素的另一种方法:

代码语言:javascript
复制
for child in drugbank.getchildren():
    print {'cas-number': child.find('{http://www.drugbank.ca}cas-number').text, 'name': child.find('{http://www.drugbank.ca}name').text}

{'cas-number': '138068-37-8', 'name': 'Lepirudin'}
{'cas-number': '205923-56-4', 'name': 'Lyme disease vaccine (recombinant OspA)'}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49778701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档