【问题标题】:How to add a root to an existing XML which doesn't have a single root tag如何将根添加到没有单个根标记的现有 XML
【发布时间】:2019-08-22 15:23:06
【问题描述】:

我有一个没有单个根标记的 XML 文件。我想在这个 XML 文件中添加一个新的 Root 标记。

下面是现有的 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

【问题讨论】:

    标签: python xml parse-error


    【解决方案1】:

    正如@kjhughes 在 cmets 中指出的那样,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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 2018-06-04
        • 1970-01-01
        相关资源
        最近更新 更多