如何在Python3中选择具有给定子节点的所有XML节点?
我从nmap获得了以下XML:如何在Python3中选择具有给定子节点的所有XML节点?,xml,python-3.x,Xml,Python 3.x,我从nmap获得了以下XML: <nmaprun> <host> <address> <hostsnames> <ports> <hostscript> </host> <host> <address> <hostsnames> <por
<nmaprun>
<host>
<address>
<hostsnames>
<ports>
<hostscript>
</host>
<host>
<address>
<hostsnames>
<ports>
</host>
<host>
<address>
<hostsnames>
<ports>
<hostscript>
</host>
</nmaprun>
使用root.findall(“.//hostscript/.[@name='host'])”
。在上面的示例中,我应该只得到3个元素中的2个。要选择包含子hostscript的主机元素,可以使用以下XPath:
/nmaprun/host[hostscript]
正如其他人在对您的问题的评论中指出的那样,@name
正在查找属性节点。您可能想改为使用。/nmaprun/host[hostscript]
?您的尝试失败,因为@name
假定存在一个属性name
,该属性包含确切的文本host
。这在您的示例XML中的任何地方都不会发生。修复了输入错误,实际上,在我的示例中,/host[hostscript]
工作正常!