Python:使用ElementTree更新XML文件,同时保留命名空间标签

时间:2015-10-22 05:56:48

标签: python xml elementtree

我正在使用ElementTree从XML中删除许多元素,然后将其写回。

编写文件后,名称空间的标签都已更改。

因此,使用XML的应用程序不再接受更新的文件。

是否可以告诉ElementTree保留原始标签?

例如。这是源XML的一部分:

<gnc:account version="2.0.0">
  <act:name>Root Account</act:name>
  <act:id type="guid">9f8f1286bffd64d6dff54385a62b2650</act:id>
  <act:type>ROOT</act:type>
  <act:commodity>
    <cmdty:space>ISO4217</cmdty:space>
    <cmdty:id>NZD</cmdty:id>
  </act:commodity>
  <act:commodity-scu>100</act:commodity-scu>
</gnc:account>

写完之后:

<ns0:account version="2.0.0">
  <ns5:name>Root Account</ns5:name>
  <ns5:id type="guid">9f8f1286bffd64d6dff54385a62b2650</ns5:id>
  <ns5:type>ROOT</ns5:type>
  <ns5:commodity>
    <ns4:space>ISO4217</ns4:space>
    <ns4:id>NZD</ns4:id>
  </ns5:commodity>
  <ns5:commodity-scu>100</ns5:commodity-scu>
</ns0:account>

我正在使用的python代码是:

import xml.etree.ElementTree as ET

tree = ET.parse('file1.xml')
root = tree.getroot()
tree.write('file2.xml')

1 个答案:

答案 0 :(得分:0)

切换到import lxml.etree as ET tree = ET.parse(args.infile) root = tree.getroot() tree.write(args.outfile, xml_declaration=True,encoding='utf-8', method="xml") 使其正常工作:

<gnc:account version="2.0.0">
  <act:name>Root Account</act:name>
  <act:id type="guid">9f8f1286bffd64d6dff54385a62b2650</act:id>
  <act:type>ROOT</act:type>
  <act:commodity>
    <cmdty:space>ISO4217</cmdty:space>
    <cmdty:id>NZD</cmdty:id>
  </act:commodity>
  <act:commodity-scu>100</act:commodity-scu>
</gnc:account>

现在输出是:

    self.writer = cv.CreateVideoWriter("test1.mp4", cv2.cv.CV_FOURCC('M', 'J', 'P', 'G'), fps, frame_size, is_color )

    self.writer = cv.CreateVideoWriter("tsest3.mp4",cv.CV_FOURCC(*'H264'), fps, (320, 240), is_color )
    self.writer = cv.CreateVideoWriter("test4.mpg", cv.CV_FOURCC('P', 'I', 'M', '1'), fps, (320, 240), is_color )

...这与输入完全相同。