xmltodict将 XML 转换为 Python 字典。它支持命名空间。我可以按照主页上的示例并成功删除命名空间。但是,我无法从 XML 中删除命名空间并且无法确定原因?这是我的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<status xmlns:mystatus="http://localhost/mystatus">
<section1
mystatus:field1="data1"
mystatus:field2="data2" />
<section2
mystatus:lineA="outputA"
mystatus:lineB="outputB" />
</status>
Run Code Online (Sandbox Code Playgroud)
并使用:
xmltodict.parse(xml,process_namespaces=True,namespaces={'http://localhost/mystatus':None})
Run Code Online (Sandbox Code Playgroud)
我得到:
OrderedDict([(u'status', OrderedDict([(u'section1', OrderedDict([(u'@http://localhost/mystatus:field1', u'data1'), (u'@http://localhost/mystatus:field2', u'data2')])), (u'section2', OrderedDict([(u'@http://localhost/mystatus:lineA', u'outputA'), (u'@http://localhost/mystatus:lineB', u'outputB')]))]))])
Run Code Online (Sandbox Code Playgroud)
代替:
OrderedDict([(u'status', OrderedDict([(u'section1', OrderedDict([(u'field1', u'data1'), (u'field2', u'data2')])), (u'section2', OrderedDict([(u'lineA', u'outputA'), (u'@lineB', u'outputB')]))]))])
Run Code Online (Sandbox Code Playgroud)
我是否犯了一些简单的错误,或者我的 XML 是否存在阻止 process_namespace 修改正常工作的问题?
xmltodict基于expat,所以命名空间应该应用于类名,而不是属性名:
<?xml version="1.0" encoding="UTF-8"?>
<status xmlns:mystatus="http://localhost/mystatus">
<mystatus:section1 field1="data1" field2="data2" />
<mystatus:section2 lineA="outputA" lineB="outputB" />
</status>
Run Code Online (Sandbox Code Playgroud)
解析时:
foo = xmltodict.parse(xml,
process_namespaces=True,
namespaces={'http://localhost/mystatus':None})
Run Code Online (Sandbox Code Playgroud)
输出:
OrderedDict([(u'status', OrderedDict([(u'section1', OrderedDict([(u'@field1', u'data1'), (u'@field2', u'data2')])), (u'section2', OrderedDict([(u'@lineA', u'outputA'), (u'@lineB', u'outputB')]))]))])
Run Code Online (Sandbox Code Playgroud)
访问它很容易:
# Get attribute 'lineA' from class 'section2' from class 'status'
>>> foo.get('status').get('section2').get('@lineA')
u'outputA'
Run Code Online (Sandbox Code Playgroud)
仅当您有多个相同名称的属性(例如多个 id 或多个价格等)时才需要属性命名空间,在这种情况下,我无法正确获取expat或xmltodict解析它。虽然是 YMMV。
| 归档时间: |
|
| 查看次数: |
4676 次 |
| 最近记录: |