9.5. 搜索元素

通过一步步访问每一个节点的方式遍历 XML 文档可能很乏味。如果你正在寻找些特别的东西,又恰恰它们深深埋入了你的 XML 文档,有个捷径让你可以快速找到它:getElementsByTagName

在这部分,将使用 binary.xml 语法文件,它的内容如下:

例 9.20. binary.xml

<?xml version="1.0"?>
<!DOCTYPE grammar PUBLIC "-//diveintopython.org//DTD Kant Generator Pro v1.0//EN" "kgp.dtd">
<grammar>
<ref id="bit">
  <p>0</p>
  <p>1</p>
</ref>
<ref id="byte">
  <p><xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/>\
<xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/></p>
</ref>
</grammar>

它有两个 ref'bit' (位) 和 'byte' (字节)。一个 bit'0' 或者 '1',而一个 byte 是 8 个 bit

例 9.21. getElementsByTagName 介绍

>>> from xml.dom import minidom
>>> xmldoc = minidom.parse('binary.xml')
>>> reflist = xmldoc.getElementsByTagName('ref') 
>>> reflist
[<DOM Element: ref at 136138108>, <DOM Element: ref at 136144292>]
>>> print reflist[0].toxml()
<ref id="bit">
  <p>0</p>
  <p>1</p>
</ref>
>>> print reflist[1].toxml()
<ref id="byte">
  <p><xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/>\
<xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/></p>
</ref>
getElementsByTagName 接收一个参数,即要找的元素的名称。它返回一个 Element 对象的列表,列表中的对象都是有指定名称的 XML 元素。在本例中,你能找到两个 ref 元素。

例 9.22. 每个元素都是可搜索的

>>> firstref = reflist[0]                      
>>> print firstref.toxml()
<ref id="bit">
  <p>0</p>
  <p>1</p>
</ref>
>>> plist = firstref.getElementsByTagName("p") 
>>> plist
[<DOM Element: p at 136140116>, <DOM Element: p at 136142172>]
>>> print plist[0].toxml()                     
<p>0</p>
>>> print plist[1].toxml()
<p>1</p>
继续前面的例子,时时彩计划软件公式:在 reflist 中的第一个对象是 'bit' ref元素。
你可以在这个 Element 上使用相同的 getElementsByTagName 方法来寻找所有在'bit' ref 元素中的<p>元素。
和前面一样,getElementsByTagName 方法返回一个找到元素的列表。在本例中,你有两个元素,每“位”各占一个。

例 9.23. 搜索实际上是递归的

>>> plist = xmldoc.getElementsByTagName("p") 
>>> plist
[<DOM Element: p at 136140116>, <DOM Element: p at 136142172>, <DOM Element: p at 136146124>]
>>> plist[0].toxml()                         
'<p>0</p>'
>>> plist[1].toxml()
'<p>1</p>'
>>> plist[2].toxml()                         
'<p><xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/>\
<xref id="bit"/><xref id="bit"/><xref id="bit"/><xref id="bit"/></p>'
仔细注意这个例子和前面例子之间的不同。前面,你是在 firstref 中搜索 p 元素,但是这里你是在 xmldoc 中搜索 p 元素,xmldoc 是代表了整个 XML 文档的根层对象。这样就会 找到嵌套在 ref 元素 (它嵌套在根 grammar 元素中) 中的 p 元素。
前两个 p 元素在第一个 ref 内 ('bit' ref)。
后一个 p 元素在第二个 ref 中 ('byte' ref)。
天机时时彩计划 重庆时时彩在线投注 谁有信誉好的网投平台 重庆时时彩老几点开始 时时彩后三大底lm0
江西时时彩追号技巧 重庆时时彩规则 时时彩网站源码下载 拉菲娱乐平台是骗局吗 重庆老时时彩开奖号码
时时彩现场开奖视频 领航时时彩二星软件 时时彩前三大小遗漏 时时彩组三玩法视频 时时彩软件可信吗
爱情对赌 江西时时彩豹子遗漏 书签518bcnet博彩堂 重庆时时彩后一公式 时时彩平台出租靠谱么
沙井急速赛车 香港六合彩官网 江苏快3豹子6000倍 极速时时彩计划群 湖北11选5杀号技巧
浙江20选5中4个 香港六合彩白小姐图库 南国彩票七星彩论坛 广西快乐双彩开奖走势 陕西11选5走势图牛
海南4+1中奖规则 德州扑克卓 福建11选5走势图一基本走势图 22选5河南最新开奖 北京pk10倍率高平台
快3开奖 湖南幸运赛车玩法 分分彩连赢一个月 新疆11选5推荐前三 江苏快3今天会开什么豹子