无法使用 Python 获取嵌套的 XML 属性

Unable to get nested XML attribute using Python

例子XML如下

<r>
  <a>installed</a>
  <ad>joe</ad>
  <d>2018-08-03</d>
  <ms_a_p>
    <m_a_p>
      <m>some_m_text</m>
      <p>some_p_text</p>
    </m_a_p>
  </m_a_p>
  <pp>more_text</pp>
  <r>text</r>
  <ri>number</ri>
  <ts/>
  <ti>12:56:44.000</ti>
</r>

我能够检索以下标签的文本:a、ad、d、pp、r、ri 和 ti,这太棒了。我无法检索 'm' 和 'p' 标签的文本。我在下面粘贴了我的 python 代码。任何建议将不胜感激。

import xml.etree.ElementTree as ET
mytree = ET.parse('/h/c/D/File')
myroot = mytree.getroot()

for rv in myroot.findall('r'):
    a = rv.find('a').text
    ad = rv.find('ad').text
    d = rv.find('d').text
    ri = rv.find('ri').text
    ti = rv.find('ti').text
    ms_a_p = rev.find('mds_a_p')
    m_a_p = ms_a_p.find('md_a_p')
    m = m_a_p.find('m').text

    if a == 'i':
        print d," - ",ad," - ",ri," - ",ti

输出看起来像这样

d  -  joe   -  number1  -  some_m_text1  -  ti1
d  -  joe1  -  number2  -  some_m_text2  -  ti2
  File "rRs.py", line 14, in <module>
    m = m_a_p.find('module').text
AttributeError: 'NoneType' object has no attribute 'find'

所以它在两种情况下有效,但在第三次 XML 匹配发生时失败。请帮忙。

缺少结束标记</ms_a_p>

编辑

我用的是Python3.7.4.

注意 myroot 已经表示 <r>.

因此我这样使用它:

<r>
  <a>i</a>
  <ad>joe</ad>
  <d>2018-08-03</d>
  <ms_a_p>
    <m_a_p>
      <m>some_m_text</m>
      <p>some_p_text</p>
    </m_a_p>
  </ms_a_p>
  <pp>more_text</pp>
  <r>text</r>
  <ri>number</ri>
  <ts/>
  <ti>12:56:44.000</ti>
</r>
import xml.etree.ElementTree as ET

mytree = ET.parse('xml.xml')
**rv** = mytree.getroot()

**# for rv in myroot.findall('r'):**
a = rv.find('a').text
ad = rv.find('ad').text
d = rv.find('d').text
ri = rv.find('ri').text
ti = rv.find('ti').text
ms_a_p = rv.find('ms_a_p')
m_a_p = ms_a_p.find('m_a_p')
m = m_a_p.find('m').text

if a == 'i':
    print(d, " - ", ad, " - ", ri, " - ", ti)

注意我用的是myroot而不是rv

我想出了如何修复我的代码。在我的 if a == 'i' 循环中,我添加了以下内容:

m = rv.find('ms_a_p/m_a_p/m').text

这让我得到了我正在寻找的文本。感谢所有花时间回答并回答这个问题的人。