为什么dom.firstChild.firstChild.nodeValue在根标记中打印文本



library.xml

<?xml version="1.0" encoding="utf-8"?>
<library>library-text. :D
<book isbn="1111111111">
<title lang="en">T1 T1 T1 T1 T1</title>
<date>2001</date>
<author>A1 A1 A1 A1 A1</author>     
<price>10.00</price>
</book>
<book isbn="2222222222">
<title lang="en">T2 T2 T2 T2 T2</title>
<date>2002</date>
<author>A2 A2 A2 A2 A2</author>     
<price>20.00</price>
</book>
<book isbn="3333333333">
<title lang="en">T3 T3 T3 T3</title>
<date>2003</date>
<author>A3 A3 A3 A3 A3y</author>        
<price>30.00</price>
</book>
</library>

Python代码

import xml.dom.minidom as minidom
xml_fname = "library.xml"
dom = minidom.parse(xml_fname) 
print(dom.firstChild.tagName)
print(dom.firstChild.firstChild.nodeValue)

输出

library
library-text. :D

为什么dom.firstChild.firstChild.nodeValue在根标记中打印文本?

不应该是dom.firstChild.nodeValue吗?

DOM中的节点不仅表示元素,文本值也是节点。<library>元素中的第一个子节点是一个文本节点,它的值是Python字符串'library-text. :Dn ':
>>> dom.firstChild.firstChild
<DOM Text node "'library-te'...">
>>> dom.firstChild.firstChild.nodeValue
'library-text. :Dn    '

注意,Elements的nodeValue属性是始终null(在Python中==None);参见Node:的DOM级别1定义

在特定nodeType的这些属性没有明显映射的情况下(例如,ElementnodeValueCommentattributes),返回null

定义组节点类型部分中指定了哪个节点类型保存Node.nodeValue的值的类型。

DOM API是一个非常简单的、基本的API,旨在与非常广泛的语言兼容,对于DOM Level 1规范(minidom唯一支持的规范)尤其如此。如果可以避免的话,你通常根本不想使用它。在Python中,使用更高级别的API,如ElementTree API(使用lxml库,这是一个功能更丰富的兼容实现)。

使用ElementTree,您主要处理元素,并且可以通过元素上的texttail属性访问文本。

相关内容

  • 没有找到相关文章

最新更新