【问题标题】:Add values dynamically in XML string using python使用python在XML字符串中动态添加值
【发布时间】:2020-02-13 20:13:15
【问题描述】:

我是 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>

输出 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】:

尝试以下方法:

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 = ET.XML(f'<intA>{val}</intA>')
    par.insert(par.index(item[0])+1,new)
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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2012-08-27
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多