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

2024-10-02 20:41:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Python2.7的ElementTree库来解析XML文件,然后用测试数据替换特定的元素属性,然后将其保存为唯一的XML文件。

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

我在ElementTree文档中看到了clear()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?


Tags: 文件字符串id列表属性xmlsidepty
1条回答
网友
1楼 · 发布于 2024-10-02 20:41:47

对于这种工作,我总是推荐^{},因为它有一个非常容易学习的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>

相关问题 更多 >