如何将根添加到没有单个根标记的现有 XML
How to add a root to an existing XML which doesn't have a single root tag
我有一个 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
正如@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)
我认为您可以在没有 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
我有一个 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
正如@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)
我认为您可以在没有 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