Python XML 解析 - Bash 中 "grep -v" 的等效命令
这是我第一次尝试使用Python。通常我会用bash,但Minidom似乎非常适合我处理XML的需求,所以我决定试试看。
我现在遇到的第一个问题是,解析文件时,'grep -v'的等价物是什么?
我提取的每个对象都是以特定标签开头的。如果在这个标签内,我想根据某个字符串来排除一行数据,我该怎么做呢?
我现在的伪代码(没有排除的部分):
mainTag = xml.getElementsByTagName("network_object")
name = network_object.getElementsByTagName("Name")[0].firstChild.data
我想要输出所有“name”字段的数据,但不包括包含“cluster”的字符串。因为我会在network_objects上进行多次搜索,我觉得需要在这个层面上处理,但我不知道该怎么做。
Etree给我带来了很多麻烦,你能给我一些用minidom实现这个逻辑的建议吗?
显然,这个方法是行不通的:
name = network_object.getElementsByTagName("Name")[0].firstChild.data
if name is not 'cluster' in name
continue
1 个回答
3
首先,别再使用minidom模块了。如果你已经了解其他语言中的DOM,并且不想学习其他的API,minidom可能还不错。但其实在标准库中有更简单的选择。我建议你使用ElementTree API。
通常,你只需要遍历匹配的项,然后跳过那些你想排除的项:
from xml.etree import ElementTree
tree = ElementTree.parse(somefile)
for name in tree.findall('.//network_object//Name'):
if name.text is not None and 'cluster' in name.text:
continue # skip this one