我是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字符串的地方,但找不到适合此特定问题的解决方案。
尝试以下方法:
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>