Я разбираю файл xml: http://pastebin.com/fw151jQN Я хочу прочитать его в копии и записать его в новый файл, некоторые из которых модифицированы, многие из них не модифицированы, и многие из них игнорируются. В качестве начального прохода я хочу найти определенный xml и записать его в новый файл без изменений.Elementtree, проверьте, имеет ли элемент определенный родитель?
Вот раздел XML, который представляет интерес в первую:
<COMMAND name="shutdown"
help="Shutdown the selected interface">
<CONFIG priority="0x7F01" />
<ACTION>
/klas/klish-scripts/interfaces.py conf -i ${iface} --enable 0
</ACTION>
</COMMAND>
<COMMAND name="no shutdown"
help="Enable the selected interface">
<CONFIG operation="unset" pattern="shutdown"/>
<ACTION>
/klas/klish-scripts/interfaces.py conf -i ${iface} --enable 1
</ACTION>
</COMMAND>
Мой код ниже
#!/usr/bin/python -tt
import xml.etree.ElementTree as ET
tree = ET.parse('interface_range_test.xml')
root = tree.getroot()
namespaces = {'command': 'http://clish.sourceforge.net/XMLSchema}COMMAND','config': 'http://clish.sourceforge.net/XMLSchema}CONFIG'}
all_links = tree.findall('.//')
for i in all_links:
if namespaces['command'] in i.tag:
if i.attrib['name'] == "shutdown":
print i.attrib
if namespaces['config'] in i.tag:
print i.attrib
Выход:
{'name': 'shutdown', 'help': 'Shutdown the selected interface'}
{'priority': '0x7F01'}
{'pattern': 'shutdown', 'operation': 'unset'}
Об этом говорится в файле и я могу найти информацию о завершении работы, теперь я хочу найти информацию CONFIG
, а затем action
информация и текст, но при поиске CONFIG
информация как для shutdown
, так и для no shutdown
. Этот случай будет происходить во множестве xml, у него много одинакового формата.
Shutdown: { 'Приоритет': '0x7F01'} нет отключения: { 'шаблон': 'выключение', 'работа': 'сбросьте}
Как я могу определить, какие смотреть , могу ли я проверить родителя этой информации? Или я могу проверить детей над суперэлементом над ним (http://clish.sourceforge.net/XMLSchema}COMMAND
)?
Вы считаете xslt для этого? в конце концов, он предназначен для преобразования xml из одной формы в другую ... – mata
@mata Я боюсь, что код должен войти в скрипт python, мой единственный вариант. – Paul
Вам нужно использовать 'findall ('.//')'? Не могли бы вы просто перебрать узлы на одном уровне? – refi64