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

标签 python xml elementtree xml.etree

我正在尝试使用 Python 2.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 以更新列表[]中的项目?

最佳答案

对于这类作品,我一直推荐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>

关于python - 使用 Python etree 更新 XML 元素和属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9177360/

相关文章:

python - 如何在 python 3 中获得 jpeg 分辨率,而不需要任何外来库?

python - 如何在python多维列表中找到高于特定值的所有索引

python - 如何在 Tensorflow 中设置损失操作的名称?

java - 在 Java DOM 中获取节点的内部 XML 作为字符串

Python ElementTree insertBefore 命令

python - 将行分成两列并保持其他列相同

java - JAXB Marshaller 没有值为 null 的元素

python - 如何有条件地从带有 ElementTree 的 XML 中获取值?

python - 使用python ElementTree,如何向具有命名空间的树添加节点?

java - 线性布局 : Aligning to the Right of the parent