У меня есть объект arptree, я пытаюсь найти mac-адрес ip-адреса, но не удалось.Использование xpath с lxml.etree._ElementTree
>>> arptree
<lxml.etree._ElementTree object at 0x0000000004641688>
Когда я пытаюсь следующий XPath, он возвращает пустой список
>>> arptree.xpath("descendant::mac-address[following-sibling::ip-address='10.69.119.150']")
[]
Если я изменить XPath, чтобы исключить «= '10 .69.119.150», он на самом деле возвращает список элементов.
>>> arptree.xpath("descendant::mac-address[following-sibling::ip-address]")
[,,,,,,,,,]
можно использовать для цикла, чтобы получить доступ к содержимому. И я уверен, что есть mac-адрес для ip-адреса 10.69.119.150.
for elt in arptree.iter():
print elt.tag, elt.text
Странно, что если я скопирую и вставляю xml-вывод в xml-файл. Затем используйте:
from lxml import etree
tree = etree.parse(open('arp.xml'))
tree.xpath("descendant::mac-address[following-sibling::ip-address='10.69.119.150']")
Она возвращает MAC-адрес для адреса IP.
Я использую Python 2.7.9 с пакетом lxml. Может ли кто-нибудь помочь?
Update 1: Пример XML
<arp-table-information>
<arp-table-entry>
<mac-address>00:a0:a5:76:1a:96</mac-address>
<ip-address>10.69.119.130</ip-address>
<hostname>10.69.119.130</hostname>
<interface-name>vlan.49</interface-name>
<arp-table-entry-flags>
<none/>
</arp-table-entry-flags>
</arp-table-entry>
<arp-table-entry>
<mac-address>00:0f:bb:c6:26:3d</mac-address>
<ip-address>10.69.119.150</ip-address>
<hostname>10.69.119.150</hostname>
<interface-name>vlan.55</interface-name>
<arp-table-entry-flags>
<none/>
</arp-table-entry-flags>
</arp-table-entry>
</arp-table-information>
Update 2: Пожалуйста, игнорируйте Update 1
Когда я использую
arptree = ex.device.rpc.get_arp_table_information().getroottree()
arptree.write('arptree.xml', pretty_print=True)
сохранить ElementTree в XML, изменения макета в
<arp-table-information style="normal">
<arp-table-entry>
<mac-address>
00:a0:a5:76:1a:96
</mac-address>
<ip-address>
10.69.119.130
</ip-address>
<hostname>
10.69.119.130
</hostname>
<interface-name>
vlan.49
</interface-name>
<arp-table-entry-flags>
<none/>
</arp-table-entry-flags>
</arp-table-entry>
<arp-table-entry>
<mac-address>
00:0f:bb:c6:26:3d
</mac-address>
<ip-address>
10.69.119.150
</ip-address>
<hostname>
10.69.119.150
</hostname>
<interface-name>
vlan.55
</interface-name>
<arp-table-entry-flags>
<none/>
</arp-table-entry-flags>
</arp-table-entry>
Возможно, поэтому следующий код не работает ???
arptree.xpath("descendant::mac-address[following-sibling::ip-address='10.69.119.150']")
Основано на этом файле xml, может ли кто-нибудь помочь?
Можете ли вы предоставить пример XML? – noxdafox
как вы получаете свое 'arptree' в первую очередь? 'Fromstring'? – Anzel
Я приведу пример в сообщении –