我使用host
循环遍历一长串lxml etree
元素,如下所示:
for host in xml.iter('host'):
每个元素都是这样的:
<host status="up" />
<address addr="84.20.200.143" addrtype="ipv4" />
</host>
我一直在阅读官方文档,试图找出如何获得每个子元素addr
的{{1}},但经过十几次尝试,我无法包装我的绕过它。我该怎么做?
答案 0 :(得分:2)
XPATH选择器可以为您提供所需的内容。假设我想要一个已启动主机的地址列表。我能做到:
for addr in xml.xpath('//host[@status="up"]/address/@addr'):
print(addr)
如果我想要我做的所有地址:
for addr in xml.xpath('//host/address/@addr'):
print(addr)
答案 1 :(得分:1)
当您遍历xml时,需要在要分析的标记上使用attrib.get('addr')
。
以下是您尝试执行的操作的功能示例:
s = """<host status="up">
<address addr="84.20.200.143" addrtype="ipv4" />
</host>"""
import xml.etree.ElementTree as ET
tree = ET.ElementTree(ET.fromstring(s))
root = tree.getroot()
print(root)
for i in root:
print(i.attrib.get('addr'))
产出:84.20.200.143
我相信您也可以在您所在的根节点上使用find
来查找该根目录中的标记。但在幕后,这很可能也在迭代寻找标签。尽管如此:
d = root.find('address').attrib.get('addr')
额外信息。看看这个,这应该提供更多信息。来自文档:
https://docs.python.org/3/library/xml.etree.elementtree.html#finding-interesting-elements
答案 2 :(得分:1)
试试这个:
for host in xml.iter('host'):
for child in host:
print child.attrib['addr']
它遍历host
的子元素address
,然后打印addr
attrib