遇到‘NodeList‘ object has no atteibute ‘getElementByTagName‘报错的解决坑

遇到’NodeList’ object has no atteibute 'getElementByTagName’报错的解决坑

最近在工作中遇到这个问题,折磨了我很长的时间,最后才找到了问题关键。下面来给大家简单的叙述一下,希望对你们有所帮助。

我的报错代码
 servers = obj_xml.getElementsByTagName('server')
 for item_server in servers:
     if item_server.getElementsByTagName('name')[0].childNodes[0].nodeValue == node_name:
         webserver = item_server.getElementsByTagName('web-server')
         if webserver != None:
             #↓↓这里是报错的地方↓↓
             webserver_log = webserver.getElementsByTagName('web-server-log')
             #↑↑这里是报错的地方↑↑
             log_clean = webserver_log.getElementsByTagName('rotation-type')[0].childNodes[0].nodeValue
             log_reserve = webserver_log.getElementsByTagName('file-count')[0].childNodes[0].nodeValue
         break

要解决问题就要明白问题出在什么地方,这是解决所有问题的第一步。
首先我们先来看报错,这个报错是什么意思呢?它是说“NodeList”没有’getElementByTagName’的这个属性。(比较直白的翻译,大家见谅)
那么’getElementByTagName’又是什么呢?它是Document 对象的一个方法。

我代码中的obj_xml正是我通过xml.dom.minidom来解析xml文件时得到的一个实例化对象。通过这个实例化对象的各种方法我们能得到我们想要的各个标签中的内容。

通过使用getElementByTagName()方法,我们可以精准定位我们想要找到的标签。它返回的是带有指定标签名的对象集合,也就是报错中的“NodeList”。

由于我想要的得到的信息还在更深层的标签中,所以我理所当然的再次使用了getElementByTagName()方法,这时候错误就产生了!!!

why???我做错了什么!!!错的地方就是getElementByTagName()方法是Document 对象的一个方法,而我通过getElementByTagName()方法得到的只是个集合。

剩下的就简单了,对于一个集合怎么才能取到里面的值,最简单的方法就是取下标

 webserver_log = webserver[0].getElementsByTagName('web-server-log')

OK!问题就这么愉快的解决了,而我们通过下标取到的依然是一个对象,所以可以再次使用getElementByTagName()方法来精准定位获取内容。

整体修改后的代码
servers = obj_xml.getElementsByTagName('server')
for item_server in servers:
    if item_server.getElementsByTagName('name')[0].childNodes[0].nodeValue == node_name:
            #如果为该节点 找寻下面标签
        webserver = item_server.getElementsByTagName('web-server')
        if webserver != None:
            webserver_log = webserver[0].getElementsByTagName('web-server-log')
            log_clean = webserver_log[0].getElementsByTagName('rotation-type')[0].childNodes[0].nodeValue
            log_reserve = webserver_log[0].getElementsByTagName('file-count')[0].childNodes[0].nodeValue
        break

只是一个下标就解决了所有问题,而我却用了很久的时间,甚至折磨我到抓狂,可能我还是个‘弟弟’。
希望这篇文章能帮到遇到同样问题而为之抓狂的你!

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值