10.4. 查找节点的直接子节点

解析 XML 文档时,另一个有用的己技巧是查找某个特定元素的所有直接子元素。例如,在语法文件中,一个 ref 元素可以有数个 p 元素,其中每一个都可以包含很多东西,包括其他的 p 元素。你只要查找作为 ref 孩子的 p 元素,不用查找其他 p 元素的孩子 p 元素。

你可能认为你只要简单地使用 getElementsByTagName 来实现这点就可以了,但是你不可以这么做。getElementsByTagName 递归搜索并返回所有找到的元素的单个列表。由于 p 元素可以包含其他的 p 元素,你不能使用 getElementsByTagName,因为它会返回你不要的嵌套 p 元素。为了只找到直接子元素,你要自己进行处理。

例 10.16. 查找直接子元素

    def randomChildElement(self, node):
        choices = [e for e in node.childNodes
                   if e.nodeType == e.ELEMENT_NODE] 
        chosen = random.choice(choices)             
        return chosen                              
正如你在例 9.9 “获取子节点”中看到的,childNodes 属性返回元素所有子节点的一个列表。
然而,时时彩计划软件公式:正如你在例 9.11 “子节点可以是文本”中看到的,childNodes 返回的列表包含了所有不同类型的节点,包括文本节点。这并不是你在这里要查找的。你只要元素形式的孩子。
每个节点都有一个 nodeType 属性,它可以是ELEMENT_NODE, TEXT_NODE, COMMENT_NODE,或者其它值。可能值的完整列表在 xml.dom 包的 __init__.py 文件中。(关于包的介绍,参见第 9.2 节 “包”。) 但你只是对元素节点有兴趣,所以你可以过滤出一个列表,其中只包含 nodeTypeELEMENT_NODE的节点。
只要拥有了一个真实元素的列表,选择任意一个都很容易。Python 有一个叫 random 的模块,它包含了好几个有用的函数。random.choice 函数接收一个任意数量条目的列表并随机返回其中的一个条目。比如,如果 ref 元素包含了多个 p 元素,那么 choices 将会是 p 元素的一个列表,而 chosen 将被赋予其中的某一个值,而这个值是随机选择的。
时时彩投注平台源代码 金诺时时彩软件9.8 新疆时时彩开奖网 重庆时时彩娱乐平台 苹果版时时彩做号工具
江西时时彩杀号lm0 时时彩预测免费软件 2017新时时彩平台 江西时时彩开奖网 重庆时时彩定位胆专家
皇冠时时彩娱乐场 凤凰时时彩平台代理 软件注册机 狐仙官时时彩软件 时时彩杀垃圾复式
江西时时彩独胆 时时彩平台排行榜综合 四季彩娱乐平台 时时彩四星缩水软件 紫光时时彩软件
云南体彩11选5开奖 青海快三今日开奖号码 新疆福彩喜乐彩开奖 七乐彩走势图 十一选五走势图
十一选五开奖信息 上海11选5一定牛 河北11选5 福建36选7奖金 双色球历史
pk10平台出租试用 贵州快3结果统计 辽宁体彩11选5玩法 即送彩金的娱乐平台 pk10开奖视频直播北京赛车pk10
河南快3今日开奖结果走势图 体育彩票22选5玩法 双色球蓝号走势图 牛牛2视频在线观看 时时彩平台签到送钱