MBa*_*ith 6 python xml elementtree
我正在尝试解析下面的 XML 文件,但很难获得特定的元素值。我正在尝试指定元素 'Item_No_2' 以获取相关值,<v>2222222222</v>
但无法使用 get.element('Item_No_2') 执行此操作。我是否错误地使用了 get.element 值?
XML文件:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="Data.xsl"?>
<abc>
<md>
<mi>
<datetime>20160822020003</datetime>
<period>3600</period>
<it>Item_No_1</it>
<it>Item_No_2</it>
<it>Item_No_3</it>
<it>Item_No_4</it>
<it>Item_No_5</it>
<it>Item_No_6</it>
<it>Item_No_7</it>
<ovalue>
<v>1111111111</v>
<v>2222222222</v>
<v>3333333333</v>
<v>4444444444</v>
<v>5555555555</v>
<v>6666666666</v>
<v>7777777777</v>
</ovalue>
</mi>
</md>
</abc>
Run Code Online (Sandbox Code Playgroud)
我的代码:
from xml.etree.ElementTree import parse
doc = parse('test.xml').getroot()
for element in doc.findall('md/mi/'):
print(element.text)
for element in doc.findall('md/mi/ovalue/'):
print(element.text)
Run Code Online (Sandbox Code Playgroud)
当前输出分别获取它们,但我似乎无法理解如何调用特定的元素值。
输出:
20160822020003
3600
Item_No_1
Item_No_2
Item_No_3
Item_No_4
Item_No_5
Item_No_6
Item_No_7
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
Run Code Online (Sandbox Code Playgroud)
试过这个,但没有奏效:
for element in doc.findall('md/mi/ovalue/'):
print(element.get('Item_No_1'))
Run Code Online (Sandbox Code Playgroud)
Item_No_1
找到的元素中没有at doc.findall('md/mi/ovalue/')
。
我想你可能会尝试做的是获取两个列表
items = [e.text for e in doc.findall('md/mi/it')]
values = [e.text for e in doc.findall('md/mi/ovalue/v')]
Run Code Online (Sandbox Code Playgroud)
'Item_No_1'
然后从 中找到字符串的索引items
,然后values
用该数字进行索引。
或者,zip
将两个列表放在一起并检查是否找到一个元素。
for item,value in zip(doc.findall('md/mi/it'), doc.findall('md/mi/ovalue/v')):
if item.text == 'Item_No_1':
print(value.text)
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法,但这些是我首先想到的方法