使用 ElementTree 在 Python 3 中处理 XML 命名空间

我有一个带有一些错误命名空间的输入 XML。我试图用 ElementTree 修复它们但没有成功


示例输入:(这里 ns0: 可以是 ns:、p:、n: 等等……)


<ns0:Invoice xmlns:ns0="http://invoices.com/docs/xsd/invoices/v1.2" version="FPR12">


  <InvoiceHeader>

    <DataH>data header</DataH>

  </InvoiceHeader>


  <InvoiceBody>

    <DataB>data body</DataB>

  </InvoiceBody>


</ns0:Invoice>

需要的输出文件:(根中的命名空间必须没有前缀,并且一些内部标记声明为 xmlns="")


<Invoice xmlns:"http://invoices.com/docs/xsd/invoices/v1.2" version="FPR12">


  <InvoiceHeader xmlns="">

    <DataH>data header</DataH>

  </InvoiceHeader>


  <InvoiceBody xmlns="">

    <DataB>data body</DataB>

  </InvoiceBody>


</Invoice>

我尝试如下更改根命名空间,但生成的文件未更改


import xml.etree.ElementTree as ET


tree = ET.parse('./cache/test.xml')

root = tree.getroot()


root.tag = '{http://invoices.com/docs/xsd/invoices/v1.2}Invoice'

xml = ET.tostring(root, encoding="unicode")

with open('./cache/output.xml', 'wt') as f:

    f.write(xml)

相反,当尝试与


changing root.tag  = 'Invoice'

它产生一个完全没有命名空间的标签


请让我知道我是否犯了任何错误,或者我应该切换到另一个库或尝试用正则表达式替换字符串


暮色呼如
浏览 322回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python