2012-05-06 12 views
7

Ho creato un documento XML utilizzando xml.etree.elementtree.Element e volevo stamparlo utilizzando la funzione ElementTree.write() ma il il tag di dichiarazione che esce èpython: tag dichiarazione xml.etree.elementtree.ElemenTtree.write()

<?xml version='1.0' encoding='UTF-8'?> 

Mentre ho bisogno di essere tra virgolette. C'è un modo di cambiarlo?

+0

Uh ... perché hai bisogno di virgolette doppie? –

+0

perché questo importa anche? è ugualmente valido xml con virgolette singole o doppie. – mata

+2

perché è un incarico e per qualche motivo l'insegnante fa una diff sull'xml. Invece di confrontare gli elementi. – Bg1987

risposta

1

Alla fine ho usato la funzione toString e aggiunto l'XML al tag corretto e quindi la funzione python file.write. È brutto (e sto mentendo sull'effettiva codifica del file) ma funziona.

+0

Potresti fornire il codice che hai scritto per aggirare questo problema? –

0

Ho dovuto fare praticamente la stessa cosa, tranne il contrario, a causa di hack in vari strumenti di lavoro $ che richiedono virgolette singole in cui python's ElementTree.write inserisce virgolette. (Un po 'di codice cerca la stringa letterale status='ok' e non riconosce status="ok". Sì, quel codice è suddiviso in diversi modi, in realtà, ma devo solo lavorarci intorno.)

Fortunatamente "dati utente" singolo o le doppie virgolette sono codificate come &apos; e &quot; (rispettivamente). Nel mio caso io ero già usando tostring piuttosto che write (per altri motivi), quindi non ho: (. Ovviamente si vorrà replace("'", '"') invece)

import xml.etree.ElementTree as ET 
# [... mass snippage] 
     text = ET.tostring(reply).replace('"', "'") 
     # [... snippaage] 
     self.wfile.write(text) 

+0

Il problema è che alcuni singoli valori citati possono contenere virgolette doppie. La semplice sostituzione potrebbe interrompere il contenuto. – pepr

+0

@pepr: concederò la possibilità teorica, ma in tutti i miei test (che ovviamente erano specifici dei miei dati, e forse anche delle librerie python installate), 'xml.etree.ElementTree' ha sempre racchiuso tra virgolette doppie come' " 'se fossero autorizzati in quella posizione. – torek

0

Ho avuto lo stesso problema, ho cercato nel codice ElementTree.py e ho visto quanto segue.

Per il tag root (singole virgolette):

 if method == "xml": 
      write("<?xml version='1.0' encoding='%s'?>\n" % encoding) 

E per gli attributi (doppi apici):

write(" %s=\"%s\"" % (qnames[k], v)) 

E 'hardcoded in quel modo ...

ho cambiato (localmente) a:

"<?xml version=\"1.0\" encoding=\"%s\"?>\n" 

Quindi ogni attributo è ora quotato doppio.

Problemi correlati