[使用python动态添加XML字符串中的值

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

我是XML的新手,并且坚持使用某些功能。我的问题陈述是我有一个列表和一个XML字符串(XML的结构不固定)。我在XML字符串中定义了一些标识符(在我的情况下为“ {some_values}”),该标识符与列表的名称相同。我希望在执行代码时,XML字符串可以标识该列表变量,并且列表中存在的值将在运行时动态添加。

some_values=[1,2,3]

输入xml

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <Add xmlns="http://tempuri.org/">
            <intA>{some_values}</intA>
        </Add>
    </Body>
</Envelope>

OutPut Xml:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <Add xmlns="http://tempuri.org/">
            <intA>1</intA>
            <intA>2</intA>
            <intA>3</intA>
        </Add>
    </Body>
</Envelope>

我需要一些可以解决此问题的方法或解决方案。我阅读了一些Python XML解析器的库,并阅读了一些我们可以使用python模板处理XML字符串的地方,但找不到适合此特定问题的解决方案。

python xml-parsing jinja2 elementtree python-templates
1个回答
0
投票

尝试以下方法:

import lxml.etree as ET

parser = ET.XMLParser()
some_values=[1,2,3]
content='''<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <Add xmlns="http://tempuri.org/">
            <intA>{some_values}</intA>
        </Add>
    </Body>
</Envelope>
'''
tree = ET.fromstring(content, parser)
item = tree.xpath('.//*[local-name()="intA"]')
par = item[0].getparent()

for val in reversed(some_values):
    new_node = f'<div>{val}</div>)'
    new2 = etree.XML(f'<intA>{val}</intA>')
    par.insert(par.index(item[0])+1,new2)
par.remove(item[0])

print(etree.tostring(tree).decode())

输出(您可以稍后修复格式):

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <Add xmlns="http://tempuri.org/">
            <intA>1</intA><intA>2</intA><intA>3</intA></Add>
    </Body>
</Envelope>
© www.soinside.com 2019 - 2024. All rights reserved.