首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XML etree从python中获取xml的值

使用XML etree从python中获取xml的值
EN

Stack Overflow用户
提问于 2022-07-21 17:37:24
回答 2查看 82关注 0票数 0

我试图从xml字符串中获取一个值,但它抛出的attrib无法从None类型中检索。

请考虑以下XML

代码语言:javascript
复制
<summary-report>
  <static-analysis>
    <modules>
     <module sev0issue="0" sev1issue="14">
     </module>
    </modules>
</static-analysis>
<dynamic-analysis>
    <modules>
     <module sev0issue="0" sev1issue="14">
     </module>
    </modules>
</dynamic-analysis>
</summary-report>

如何解析和获取静态分析标签下的sev0issue?

我正在尝试下面的代码来获得值。

代码语言:javascript
复制
value= ET.fromstring(XmlData) 
issue= value.find('.//summary-report/static-analysis/modules/module')
issueCount= issue.get('sev0issue') 

当我尝试这样做的时候,我得到了错误,就像没有attrib的sev0issue用于非类型

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-21 20:01:06

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

XmlData = '''<summary-report>
  <static-analysis>
    <modules>
     <module sev0issue="0" sev1issue="14">
     </module>
    </modules>
</static-analysis>
<dynamic-analysis>
    <modules>
     <module sev0issue="0" sev1issue="14">
     </module>
    </modules>
</dynamic-analysis>
</summary-report>'''

summary_report = ET.fromstring(XmlData)

# Method 1 prints both values from static and dynamic analysis
for a in summary_report:
    for b in a:
        for c in b:
            print(c.attrib['sev0issue'])
print()

# Method 2
print(summary_report[0][0][0].attrib['sev0issue'])

产出:

代码语言:javascript
复制
0
0

0
票数 1
EN

Stack Overflow用户

发布于 2022-07-21 18:36:24

不太确定为什么,但是使用ElementTree,您不会开始从根元素进行搜索。正确的版本是:

代码语言:javascript
复制
issue = value.find('.//static-analysis/modules/module')
issue.get('sev0issue') 

另一方面,如果使用lxml,则更直观:

代码语言:javascript
复制
from lxml import etree
value= etree.fromstring(XmlData) 
values.xpath('/summary-report/static-analysis/modules/module/@sev0issue')

同样的输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73070533

复制
相关文章

相似问题

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