为了账号安全,请及时绑定邮箱和手机立即绑定

如果使用 minidom 在 python 中找不到标签,则继续 xml 解析

如果使用 minidom 在 python 中找不到标签,则继续 xml 解析

开满天机 2021-08-24 19:09:41
示例 XML 文档<Authors>    <Author>        <LastName>def</LastName>        <age>20</age>    </Author>    <Author>        <ForeName>ghi</ForeName>        <age>22</age>    </Author>    <Author>        <ForeName>mno</ForeName>        <LastName>pqr</LastName>        <age>23</age>    </Author></Authors>样本输出Author:FirstName :  -LastName :  defAuthor:FirstName :  ghiLastName : - Author:FirstName :  mnoLastName :  pqr示例代码import xml.dom.minidom# use the parse() function to load and parse an XML filedoc = xml.dom.minidom.parse("sampleinput.xml");auth = doc.getElementsByTagName('Author')for a in auth:    print("Author:")    try:        print("FirstName : ",a.getElementsByTagName("ForeName")[0].firstChild.data)    except:        print("FirstName : - ")    try:        print("LastName : ",a.getElementsByTagName("LastName")[0].firstChild.data)    except:        print("LastName : - ")如果找不到相应的标签,我想插入一个“-”符号。有没有其他可靠的方法可以做到这一点而不是尝试和排除?
查看完整描述

1 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

有!因此,让我们看看a.getElementsByTagName如果它不包含您的目标元素,当您实际运行时会发生什么。


for a in auth:

    print(a.getElementsByTagName("ForeName"))


>>

[]

[<DOM Element: ForeName at 0x163a17226d0>]

[<DOM Element: ForeName at 0x163a1722898>]

是的,现在我们知道如果你尝试获取一个它没有的元素,它会返回一个空列表并且也与文档对齐:


NodeList 表示节点序列。这些对象在 DOM Core 推荐中以两种方式使用:一个 Element 对象提供一个作为其子节点列表,Node 的 getElementsByTagName() 和 getElementsByTagNameNS() 方法返回具有此接口的对象以表示查询结果。


现在,您可以在打印数据之前明确检查元素是否存在,而不是执行try和except循环:


for a in auth:

    if a.getElementsByTagName("ForeName"):

        print("FirstName : ",a.getElementsByTagName("ForeName")[0].firstChild.data)

    else:

        print("FirstName : - ")


>>

FirstName : - 

FirstName :  ghi

FirstName :  mno

这里if块检查它是否不为空,然后打印。如果NodeList为空,则打印破折号。


查看完整回答
反对 回复 2021-08-24
  • 1 回答
  • 0 关注
  • 265 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信