9.6. 访问元素属性
优质
小牛编辑
127浏览
2023-12-01
9.6. 访问元素属性
XML 元素可以有一个或者多个属性,一旦你已经解析了一个 XML 文档,访问它们就太简单了。
在这部分中,将使用 binary.xml 语法文件,你在上一节中已经看到过了。
这部分由于某个涵义重叠的术语可能让人有点糊涂。在一个 XML 文档中,元素可以有属性,而 Python 对象也有属性。当你解析一个 XML 文档时,你得到了一组 Python 对象,它们代表 XML 文档中的所有片段,同时有些 Python 对象代表 XML 元素的属性。但是表示(XML)属性的(Python)对象也有(Python)属性,它们用于访问对象表示的(XML)属性。我告诉过你它让人糊涂。我会公开提出关于如何更明显地区分这些不同的建议。 |
例 9.24. 访问元素属性
>>> xmldoc = minidom.parse('binary.xml') >>> reflist = xmldoc.getElementsByTagName('ref') >>> bitref = reflist[0] >>> print bitref.toxml() <ref id="bit"> <p>0</p> <p>1</p> </ref> >>> bitref.attributes <xml.dom.minidom.NamedNodeMap instance at 0x81e0c9c> >>> bitref.attributes.keys() [u'id'] >>> bitref.attributes.values() [<xml.dom.minidom.Attr instance at 0x81d5044>] >>> bitref.attributes["id"] <xml.dom.minidom.Attr instance at 0x81d5044>
每个 Element 对象都有一个称为attributes的属性,它是一个 NamedNodeMap 对象。听上去挺吓人的,其实不然,因为 NamedNodeMap 是一个行为像字典的对象,所以你已经知道怎么使用它了。 | |
将 NamedNodeMap 视为一个字典,你可以通过attributes.keys()获得属性名称的一个列表。这个元素只有一个属性,'id'。 | |
属性名称,像其它 XML 文档中的文本一样,都是以unicode保存的。 | |
再次将 NamedNodeMap 视为一个字典,你可以通过attributes.values()获取属性值的一个列表。这些值本身是 Attr 类型的对象。你将在下一个例子中看到如何获取对象的有用信息。 | |
仍然把 NamedNodeMap 视为一个字典,你可以通过常用的字典语法和名称访问单个的属性。(那些非常认真的读者将已经知道 NamedNodeMap 类是如何实现这一技巧的:通过定义一个__getitem__ 特殊方法。它的读者可能乐意接受这一事实:他们不需要理解它是如何工作的就可以有效地使用它。) |
例 9.25. 访问单个属性
>>> a = bitref.attributes["id"] >>> a <xml.dom.minidom.Attr instance at 0x81d5044> >>> a.name u'id' >>> a.value u'bit'
Attr 对象完整代表了单个 XML 元素的单个 XML 属性。属性的名称(与你在bitref.attributes NamedNodeMap 的伪目录中寻找的对象同名)保存在a.name中。 | |
这个 XML 属性的真实文本值保存在a.value中。 |
类似于字典,一个 XML 元素的属性没有顺序。属性可以以某种顺序偶然列在最初的 XML 文档中,而在 XML 文档解析为 Python 对象时,Attr 对象以某种顺序偶然列出,这些顺序都是任意的,没有任何特别的含义。你应该总是使用名称来访问单个属性,就像字典的键一样。 |