jyb000 发表于 2021-3-3 17:28:53

python求助

有一abc.XML文件,如下:
<?xml version="1.0" encoding="utf-8"?>
<catalog>
       <maxid>4</maxid>
       <login username="pytest" passwd='123456'>
         <caption>Python</caption>
         <aa>23</aa>
       </login>
       <maxid>5</maxid>
       <login username="py" passwd='123456'>
         <caption>Test</caption>
         <aa>aa</aa>
       </login>
       <maxid>6</maxid>
       <login username="pyrr" passwd='123456'>
         <caption>Testtest</caption>
         <aa></aa>
       </login>
</catalog>
-----------------------------------------
用python提其需要的内容
------------------------------------

from xml.dom.minidom import parse

dom = parse('abc.xml')
data = dom.documentElement
stus = data.getElementsByTagName('login')
for stu in stus:
# 获取标签中内容
    a = stu.getElementsByTagName('caption').childNodes.nodeValue
    b = stu.getElementsByTagName('aa').childNodes.nodeValue
    print(a,b)
出错,错误提示,b = stu.getElementsByTagName('aa').childNodes.nodeValue
IndexError: list index out of range。
出错原因是 最后一个<aa></aa>存在一个空值,在不改动原表的的情况下,如何将空值输出为none且不出错!!

初学,请前辈指点下!!谢谢!

hrp 发表于 2021-3-3 17:44:37

from xml.dom.minidom import parse

dom = parse('abc.xml')
data = dom.documentElement
stus = data.getElementsByTagName('login')
for stu in stus:
# 获取标签中内容
    tmp = stu.getElementsByTagName('caption')
    a = tmp.childNodes.nodeValue if tmp else None
    tmp = stu.getElementsByTagName('aa')
    b = tmp.childNodes.nodeValue if tmp else None
    print(a,b)

jyb000 发表于 2021-3-4 17:23:53

b值全部变为None了……。23,aa 没有读出来~{:5_91:}

hrp 发表于 2021-3-4 20:09:27

jyb000 发表于 2021-3-4 17:23
b值全部变为None了……。23,aa 没有读出来~

那是根本没读取到aa的值,你要从源头查问题,我改的只是判断tmp = stu.getElementsByTagName('aa')返回的是否是空列表,是空列表就将b赋值为None,不为空就将tmp.childNodes.nodeValue赋值给b。很明显for循环中的几个stu的stu.getElementsByTagName('aa')都返回了空列表。
另外你要点“回复”,要不然我看不到你的回复。
页: [1]
查看完整版本: python求助