无法使用 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
这让我得到了我正在寻找的文本。感谢所有花时间回答并回答这个问题的人。
例子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
这让我得到了我正在寻找的文本。感谢所有花时间回答并回答这个问题的人。