Aby odpowiedzieć na to pytanie jasno nr, nie można mieć plik XML z <
lub >
w którymkolwiek z pól wartości, gdyż format XML używa tych znaków do oznaczenia elementów rodzicem a dzieckiem, na przykład <note>
, <to>
, <from>
itp
Rozwijając moją odpowiedź: Kiedy skrypt Pythona pisze <
lub >
pomocą XML library, biblioteka przekłada je do <
lub >
odpowiednio. Nie sądzę, że jest to możliwe w tej bibliotece, ponieważ w rzeczywistości odfiltrowuje znaki <
i , a także Referencje jednostki znaku. Ma to sens - biblioteka XML zapobiega zakłócaniu składni użytej dla obiektu macierzystego: xml.etree.cElementTree.Element
lub dowolnego obiektu potomnego xml.etree.cElementTree.SubElement
. Na przykład za pomocą bloku kodu w tym great answer do eksperymentu:
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")
Daje <root><doc><field1 name="blah">some <value></field1><field2 name="asdfasd">some <other value></field2></doc></root>
.
Prettifying go:
<root>
<doc>
<field1 name="blah">
some <value>
</field1>
<field2 name="asdfasd">
some <other value>
</field2>
</doc>
</root>
Jednak nie ma nic Cię powstrzymuje się od wprowadzania tych znaków ręcznie: czytaj w pliku XML i ponownie zapisać go, dodawanie tekstu, nawet jeśli zawiera <
lub >
. Jeśli jednak potrzebujesz odpowiedniego pliku XML, upewnij się, że te znaki są używane tylko w polach komentarzy.
dla danego problemu, można przeczytać w linii z plików XML klienta, to albo usunąć <
i >
znaków lub, jeśli klient wymaga od nich, przenieść je do skomentował części linii. Częścią wyzwania jest to, że musisz zostawić fragmenty pliku w pliku <note>,
... To jest trudne, ale byłoby to możliwe!
Oto, jak bym oczekiwał, że wynik będzie wyglądał.
<?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>
Jeśli nie chcesz poprosić klienta o naprawienie pliku, oczywistym rozwiązaniem jest samodzielne rozwiązanie problemu. Jeśli jest to element jednorazowy, zmodyfikuj go i zastąp zastrzeżone znaki predefiniowanymi odwołaniami do encji; jeśli zdarzy się to wielokrotnie, napisz skrypt sed lub jego odpowiednik w edytorze wsadowym, aby dokonać zmiany. (Jeśli nie masz edytora wsadowego z wyboru i napotykasz na problemy takie jak to, powinieneś nauczyć się o edytorach wsadowych i uzyskać dobry wynik w jednym). –