使用 Python etree 更新 XML 元素和属性值

2023-11-26

我正在尝试使用Python 2.7ElementTree库来解析 XML 文件,然后用测试数据替换特定元素属性,然后将其保存为唯一的 XML 文件。

我的解决方案的想法是(1)通过将文件读取为字符串来从 CSV 文件中获取新数据,(2)在某些分隔符标记处对字符串进行切片,(3)附加到列表,然后(4)使用ElementTree使用列表中的特定值更新/删除/替换属性。

我看过ElementTree文档并看到了clear() and remove()函数,但我不知道充分使用它们的语法。

下面是要修改的 XML 示例 - 属性XXXXX将被替换/更新:

<TrdCaptRpt RptID="10000001" TransTyp="0">
    <RptSide Side="1" Txt1="XXXXX">
        <Pty ID="XXXXX" R="1"/>
    </RptSide>
</TrdCaptRpt>

预期结果将是,例如:

<TrdCaptRpt RptID="10000001" TransTyp="0">
    <RptSide Side="1" Txt1="12345">
        <Pty ID="ABCDE" R="1"/>
    </RptSide>
</TrdCaptRpt>

我该如何使用etree命令更改基本 XML 以使用列表 [] 中的项目进行更新?


对于此类工作,我总是推荐BeautifulSoup因为它有一个非常容易学习的 API:

from BeautifulSoup import BeautifulStoneSoup as Soup

xml = """
<TrdCaptRpt RptID="10000001" TransTyp="0">
    <RptSide Side="1" Txt1="XXXXX">
        <Pty ID="XXXXX" R="1"/>
    </RptSide>
</TrdCaptRpt>
"""

soup = Soup(xml)
rpt_side = soup.trdcaptrpt.rptside
rpt_side['txt1'] = 'Updated'
rpt_side.pty['id'] = 'Updated'

print soup

输出示例:

<trdcaptrpt rptid="10000001" transtyp="0">
<rptside side="1" txt1="Updated">
<pty id="Updated" r="1">
</pty></rptside>
</trdcaptrpt>

编辑:与xml.etree.ElementTree你可以使用以下脚本:

from xml.etree import ElementTree as etree

xml = """
<TrdCaptRpt RptID="10000001" TransTyp="0">
    <RptSide Side="1" Txt1="XXXXX">
        <Pty ID="XXXXX" R="1"/>
    </RptSide>
</TrdCaptRpt>
"""

root = etree.fromstring(xml)
rpt_side = root.find('RptSide')
rpt_side.set('Txt1', 'Updated')
pty = rpt_side.find('Pty')
pty.set('ID', 'Updated')
print etree.tostring(root)

输出示例:

<TrdCaptRpt RptID="10000001" TransTyp="0">
    <RptSide Side="1" Txt1="Updated">
        <Pty ID="Updated" R="1" />
    </RptSide>
</TrdCaptRpt>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python etree 更新 XML 元素和属性值 的相关文章

随机推荐