#python #xml #parse-error
#python #xml #ошибка синтаксического анализа
Вопрос:
У меня есть один XML-файл, в котором нет ни одного корневого тега. Я хочу добавить новый корневой тег к этому XML-файлу.
Ниже приведен существующий XML:
<A>
<Val>123</Val>
</A>
<B>
<Val1>456</Val1>
</B>
Теперь я хочу добавить корневой тег ‘X’, чтобы конечный XML выглядел как:
<X>
<A>
<Val>123</Val>
</A>
<B>
<Val1>456</Val1>
</B>
</X>
Я попытался использовать приведенный ниже код Python:
from xml.etree import ElementTree as ET
root = ET.parse(Input_FilePath).getroot()
newroot = ET.Element("X")
newroot.insert(0, root)
tree = ET.ElementTree(newroot)
tree.write(Output_FilePath)
Но в первой строке я получаю приведенную ниже ошибку:
xml.etree.ElementTree.ParseError: junk after document element: line 4, column 4
Ответ №1:
Как указано в комментариях @kjhughes, спецификация XML требует, чтобы документ имел один корневой элемент.
from xml.etree import ElementTree as ET
node = ET.parse(Input_FilePath)
xml.etree.ElementTree.ParseError: junk after document element: line 4, column 0
Вам нужно будет прочитать файл вручную и добавить теги самостоятельно:
from xml.etree import ElementTree as ET
with open(Input_FilePath) as f:
xml_string = '<X>' f.read() '</X>'
node = ET.fromstring(xml_string)
Ответ №2:
Я думаю, что вы можете обойтись без синтаксических анализаторов xml. Если вы знаете, что корневой тег отсутствует, вы можете добавить его таким способом.
with open('test.xml', 'r') as f:
data = f.read()
with open('test.xml', 'w') as f:
f.write("<x>n" data "n</x>")
f.close()
Если вы не знаете, вы можете проверить это с помощью:
import re
if re.match(u"s*<x>.*</x>", text, re.S) != None:
#do something
pass