我正在尝试使用 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/