【问题标题】:Python getting element value for specific elementPython获取特定元素的元素值
【发布时间】:2016-08-23 03:24:02
【问题描述】:

我正在尝试解析以下 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>

我的代码:

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)

当前输出分别获取它们,但我似乎无法理解如何调用特定元素值。

输出:

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

试过了,但没用:

for element in doc.findall('md/mi/ovalue/'):
    print(element.get('Item_No_1'))

【问题讨论】:

    标签: python xml elementtree


    【解决方案1】:

    doc.findall('md/mi/ovalue/') 找到的元素中没有Item_No_1

    我认为您可以尝试获取两个列表

    items = [e.text for e in doc.findall('md/mi/it')]
    values = [e.text for e in doc.findall('md/mi/ovalue/v')]
    

    然后从items中找到字符串'Item_No_1'的索引,然后用那个数字索引到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)
    

    可能有更好的方法,但这些是首先想到的方法

    【讨论】:

    • 感谢您的回复。 ZIP 的第二种选择给了我错误的输出。提供 3333333 而不是 111111,你知道为什么吗?我喜欢第一个选项,但你能告诉我如何获得索引吗?
    • 使用for item, value in zip(doc.findall('md/mi/it'), doc.findall('md/mi/ovalue/v')):
    • @FujiApple 谢谢,这可以使输出与项目匹配。现在我只需要再玩一些,并弄清楚如何在更大的 xml 中始终如一地获得正确的匹配,其中包含多个不具有可变数量值的元素。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多