如何将根添加到没有单个根标记的现有XML

问题描述 投票:0回答:2

我有一个没有单个根标记的XML文件。我想为此XML文件添加一个新的Root标记。

以下是现有的XML:

<A>
    <Val>123</Val>
</A>

<B>
    <Val1>456</Val1>
</B>

现在我想添加一个Root标签'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
python xml parse-error
2个回答
0
投票

我认为你可以在没有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

2
投票

正如@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)
© www.soinside.com 2019 - 2024. All rights reserved.