2017-02-16 2 views
0

Ich habe ein bisschen Zeit damit verbracht, dies zu erforschen und ich komme leer.Kommentare dynamisch hinzufügen/entfernen in Python ElementTree

Ich bin völlig neu in Python und ich versuche, durch meine XML-Datei zu gehen und im Wesentlichen, wenn etwas nicht aktiv ist ein bestimmtes Element auskommentieren, wenn wieder auskommentiert. Der Check für aktiv oder nicht ist in Ordnung, ist nur das anschließende Kommentieren oder Ausgehen Ich bin an die Wand gegangen. Ich verwende Python 2.7

meine Struktur ist ziemlich einfach:

<?xml version="1.0" encoding="utf-8"?> 
<smil xmlns="http://www.w3.org/2001/SMIL20/Language"> 
    <head> 
    <meta name="a" content="some stuff" /> 
    <meta name="b" content="things and stuff" /> 
    <meta name="c" content="rubbish stuff" /> 
    <groupStuff id="foo"> 
     <meta name="thing" content="wibble" /> 
    </groupStuff> 
    <groupStuff id="bar"> 
     <meta name="thing" content="bibble" /> 
    </groupStuff> 
    </head> 
    <body> 
    </body> 
</smil> 

Also, wenn inaktiv Kommentar aus Knoten, dann, wenn aktive bringen.

Ich nahm an, dies wäre recht geradlinig und wahrscheinlich sein, aber ich bin total stecken

Antwort

0

Sie technisch ein Element mit einem Kommentar Knoten seiner String-Darstellung ersetzen könnte:

#!/usr/bin/env python 
import xml.etree.ElementTree as ET 

root = ET.XML("""<?xml version="1.0" encoding="utf-8"?> 
<smil xmlns="http://www.w3.org/2001/SMIL20/Language"> 
    <head> 
    <meta name="a" content="some stuff" /> 
    <meta name="b" content="things and stuff" /> 
    <meta name="c" content="rubbish stuff" /> 
    <groupStuff id="foo"> 
     <meta name="thing" content="wibble" /> 
    </groupStuff> 
    <groupStuff id="bar"> 
     <meta name="thing" content="bibble" /> 
    </groupStuff> 
    </head> 
    <body> 
    </body> 
</smil>""") 

parent = root.findall(".//*[@name='a']/..")[0] 
child = parent.findall(".//*[@name='a']")[0] 

commented = ET.tostring(child) 

parent.remove(child) 
parent.append(ET.Comment(commented)) 

print ET.tostring(root) 

Sie verwenden können insert anstelle von append, wenn die Reihenfolge von Bedeutung ist.

Für das Kommentieren müssen möglicherweise einige Markierungen verwendet werden, die deaktivierte Elemente von echten Kommentaren unterscheiden. aber im Grunde würden Sie die Kommentardaten als eigenes Element analysieren und in ähnlicher Weise in die Baumstruktur einfügen.

Verwandte Themen