XML解析器返回NoneType

时间:2020-03-31 13:42:02

标签: python elementtree

我正在尝试使用Python中的ElementTree XML解析以下XML格式,但是当我使用<FacebookLogin {...other props} disableMobileRedirect={true} /> 时,它的“成员”为None

.text

这是我的代码:

<address-group>
  <entry name="TBR">
    <static>
      <member>TBR1-1.1.1.1_21</member>
       <member>TBR2-2.2.2.2_24</member>
      <member>TBR3-3.3.3.3_21</member>
      <member>TBR4-4.4.4.4_24</member>
    </static>
   </entry>
<address-group>

2 个答案:

答案 0 :(得分:0)

下面的代码按条目名称汇总每个条目的成员

import xml.etree.ElementTree as ET
import pprint

XML = '''

<address-group>
  <entry name="TBR1">
    <static>
      <member>TBR1-1.1.1.1_21</member>
       <member>TBR2-2.2.2.2_24</member>
      <member>TBR3-3.3.3.3_21</member>
      <member>TBR4-4.4.4.4_24</member>
    </static>
   </entry>
   <entry name="TBR2">
    <static>
      <member>TBR1-4.1.1.1_21</member>
       <member>TBR2-4.2.2.2_24</member>
      <member>TBR3-4.3.3.3_21</member>
      <member>TBR4-9.4.4.4_24</member>
    </static>
   </entry>
</address-group>'''

root = ET.fromstring(XML)
data_by_entry = {}
entries = root.findall('.//entry')
for entry in entries:
    data_by_entry[entry.attrib['name']] = [m.text for m in entry.findall('./static/member')]
pprint.pprint(data_by_entry)

输出

{'TBR1': ['TBR1-1.1.1.1_21',
          'TBR2-2.2.2.2_24',
          'TBR3-3.3.3.3_21',
          'TBR4-4.4.4.4_24'],
 'TBR2': ['TBR1-4.1.1.1_21',
          'TBR2-4.2.2.2_24',
          'TBR3-4.3.3.3_21',
          'TBR4-9.4.4.4_24']}

答案 1 :(得分:0)

问题的根源是:

    for mem in ip.findall('member'):循环中的
  • mem 是当前的 member 元素,
  • 但是此循环中的第一条指令是member = mem.find('member'), 因此您尝试在当前成员中找到另一个(嵌套)成员, 不存在。

您代码中的另一个缺陷是,打印出一个可以 没有任何文字。

将循环更改为以下代码:

for entries in root.findall('entry'):
    name = entries.get('name')
    print(name)
    ip = entries.find('static')
    print('Members:')
    for mem in ip.findall('member'):
        print(mem.text)

您将获得有意义的结果。