Je suis en train d'analyser un fichier xml: http://pastebin.com/fw151jQN Je souhaite le lire en copie et l'écrire dans un nouveau fichier, en partie modifié, beaucoup non modifié, et beaucoup d'entre eux ignorés. Comme une passe initiale, je veux trouver certains xml, et l'écrire dans un nouveau fichier inchangé.Elementtree, vérifie si l'élément a un parent?
Voici la section du xml qui est d'intérêt au premier:
<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>
Mon code est ci-dessous
#!/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
Sortie:
{'name': 'shutdown', 'help': 'Shutdown the selected interface'}
{'priority': '0x7F01'}
{'pattern': 'shutdown', 'operation': 'unset'}
Ce lit dans le fichier et je peux trouver l'information d'arrêt, maintenant je veux trouver les informations CONFIG
, puis le action
informations et son texte, mais quand je cherche, il ya CONFIG
informations à la fois pour shutdown
et no shutdown
. Ce cas se produira dans beaucoup de xml, beaucoup ont le même format.
Arrêt: { 'priorité': '0x7F01'} pas d'arrêt: { 'pattern': 'arrêt', 'opération': 'unset'}
Comment puis-je préciser que de regarder , puis-je vérifier le parent de cette information? Ou puis-je vérifier les enfants de l'élément super-dessus (http://clish.sourceforge.net/XMLSchema}COMMAND
)?
avez-vous considéré xslt pour cela? après tout, il est conçu pour transformer xml d'une forme à l'autre ... – mata
@mata J'ai peur que le code ne soit dans un script python, ma seule option. – Paul
Doit-on utiliser 'findall ('.//')'? Pourriez-vous simplement parcourir les noeuds d'un niveau? – refi64