首页 > 深入Python > XML处理 > 访问元素属性 | << >> | ||||
diveintopython.org Python for experienced programmers |
XML元素可以有一个或多个属性,一旦你已经分析完XML文档,访问它们相当容易。
在这部分,我们将使用在上一节中看到的 binary.xml 语法文件。
这一节由于某个涵义重叠的术语可能让人有点糊涂。在一个XML文档中元素拥有属性,而Python对象也拥有属性。当我们分析一个XML文档时,我们得到一组Python对象,它们代表XML文档的所有片段,同时这些Python对象中的某些还表示元素的属性。但是表示属性(XML)的对象(Python)也有(Python)属性,它们被用来访问对象所表示的属性(XML)的各个部分。我告诉过你它让人糊涂。我会公开关于如何更明显地区分这些不同的意见。 |
>>> 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__ 特别方法。其它的读者可能乐意接受这一事实:他们不需要理解它是如何工作的就可以有效地使用它。) |
>>> a = bitref.attributes["id"] >>> a <xml.dom.minidom.Attr instance at 0x81d5044> >>> a.name u'id' >>> a.value u'bit'
象字典一样,XML元素的属性没有顺序。属性可能碰巧按原始XML文档的某种顺序被列出,同时 Attr 对象可能碰巧按XML文档被分析成Python对象时的某种顺序列出。但这些对象是随意的并不带有某种涵义。你应该总是通过名字来访问单个属性,如同字典的关键字。 |
搜索元素 |
1 2 3 4 5 6 7 8 9 | 提取输入源 |