设置默认命名空间的前缀

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

我有 XML:

<root xmlns="test:env:v.1"><elem1>text-1</elem1><elem2>text-2</elem2></root>

我需要使用 lxml 设置默认命名空间的前缀:

<n1:root xmlns:n1="test:env:v.1"><n1:elem1>text-1</n1:elem1><n1:elem2>text-2</n1:elem2></n1:root>
python lxml
1个回答
0
投票

解决方案是这样的:创建一个新的xml(包装器),设置命名空间前缀,并将原始xml放入其中,前缀将被继承。如果您想保留原始XML,您可以申请

deepcopy

import copy

from lxml import etree

origin = etree.fromstring('<root xmlns="test:env:v.1"><elem1>text-1</elem1><elem2>text-2</elem2></root>')

ns = origin.nsmap[None]
wrapper = etree.Element(etree.QName(ns, 'wrap'), nsmap={'n1': ns})

copy_ = copy.deepcopy(origin)
wrapper.append(copy_)

print(etree.tostring(origin, method='c14n').decode('ascii'))
print(etree.tostring(copy_, method='c14n').decode('ascii'))

也许有更好的解决方案

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