如何通过的ElementTree在Python中解析XML时保留的命名空间

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

假设我有以下的XML我想用Python的ElementTree修改:

<root xmlns:prefix="URI">
  <child company:name="***"/>
  ...
</root> 

我正在做的事情是这样的XML文件做一些修改:

import xml.etree.ElementTree as ET
tree = ET.parse('filename.xml')
# XML modification here
# save the modifications
tree.write('filename.xml')

那么XML文件的样子:

<root xmlns:ns0="URI">
  <child ns0:name="***"/>
  ...
</root>

正如你所看到的,命名空间qazxsw POI变更为qazxsw POI。我知道使用prefix提到ns0的。

ET.register_namespace()的问题是:

  1. 你需要知道hereET.register_namespace()
  2. 它不能与默认的命名空间中使用。

例如如果XML是这样的:

prefix

这将转化为类似:

URI

正如你所看到的,默认的命名空间更改为<root xmlns="http://uri"> <child name="name"> ... </child> </root>

有没有什么办法与<ns0:root xmlns:ns0="http://uri"> <ns0:child name="name"> ... </ns0:child> </ns0:root> 来解决这个问题?

python xml xml-parsing xml-namespaces elementtree
1个回答
3
投票

这里是保留的命名空间前缀和URI的方式:

ns0

这个方法应该调用ElementTree方法之前被调用。

© www.soinside.com 2019 - 2024. All rights reserved.