Per rispondere alla tua domanda chiaramente no, non è possibile avere un file XML con <
o >
in uno qualsiasi dei suoi campi di valore perché il formato XML utilizza questi caratteri per indicare gli elementi principali e secondari, per esempio <note>
, <to>
, <from>
, ecc
Ampliando la mia risposta: Quando uno script Python scrive <
o >
utilizzando il XML library, la biblioteca li traduce rispettivamente <
o >
,. Non credo che questo sia possibile con quella libreria poiché in realtà sta filtrando i caratteri <
e così come i riferimenti alle entità dei caratteri. Questo ha senso: la libreria XML ti impedisce di interrompere la sintassi utilizzata per il genitore xml.etree.cElementTree.Element
o qualsiasi campo secondario di oggetti xml.etree.cElementTree.SubElement
. Ad esempio, utilizzare il blocco di codice in questo great answer di sperimentare:
import xml.etree.cElementTree as ET
root = ET.Element("root")
doc = ET.SubElement(root, "doc")
ET.SubElement(doc, "field1", name="blah").text = "some <value>"
ET.SubElement(doc, "field2", name="asdfasd").text = "some <other value>"
tree = ET.ElementTree(root)
tree.write("filename.xml")
Questo produce <root><doc><field1 name="blah">some <value></field1><field2 name="asdfasd">some <other value></field2></doc></root>
.
prettifying esso:
<root>
<doc>
<field1 name="blah">
some <value>
</field1>
<field2 name="asdfasd">
some <other value>
</field2>
</doc>
</root>
Tuttavia, non c'è nulla ti impedisce di aggiungere questi personaggi manualmente: leggere nel file XML e ri-scrivere, l'aggiunta di testo, anche se contiene <
o >
. Se si desidera un file XML corretto, accertarsi che questi caratteri vengano utilizzati solo nei campi dei commenti.
per il vostro problema particolare si poteva leggere nelle linee da file XML del cliente, quindi rimuovere le <
e >
personaggi o, se il cliente lo richiede, spostarli in una parte commentata della linea. Parte della sfida è che devi andare nelle porzioni <note>,
`, ecc. Del file ... Questo è impegnativo ma sarebbe possibile!
Quanto segue è quello che mi aspetto che il risultato sia simile.
<?xml version="1.0" encoding="UTF-8"?>
<note Name="PrintPgmInfo VDD"> <!-- PrintPgmInfo <> VDD -->
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Se non si desidera chiedere al client di correggere il file, la soluzione più ovvia è quella di risolvere il problema da soli. Se è una cosa una tantum, modificalo e sostituisci i caratteri riservati con i riferimenti di entità predefiniti; se questo accadrà ripetutamente, scrivi una sceneggiatura sed o l'equivalente nel tuo editor batch di scelta per apportare la modifica. (Se non si dispone di un editor batch di scelta e si affrontano problemi come questo, è necessario conoscere i redattori batch e ottenere risultati positivi in uno.) –