Как добавить корень в существующий XML, который не имеет единственного корневого тега - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть один XML-файл, у которого нет ни одного корневого тега. Я хочу добавить новый тег Root в этот файл 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

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Как указано в комментариях @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)
0 голосов
/ 01 апреля 2019

Я думаю, что вы можете обойтись без парсеров 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...