使用Python etree更新XML元素和属性值
我试图使用Python2.7的使用Python etree更新XML元素和属性值,python,xml,elementtree,xml.etree,Python,Xml,Elementtree,Xml.etree,我试图使用Python2.7的ElementTree库解析XML文件,然后用测试数据替换特定的元素属性,然后将其保存为唯一的XML文件 我的解决方案是:(1)通过将文件读入字符串来从CSV文件中获取新数据,(2)在某些分隔符标记处对字符串进行切片,(3)附加到列表中,然后(4)使用ElementTree更新/删除/替换列表中特定值的属性 我查看了ElementTree文档,看到了clear()和remove()函数,但我不知道如何正确使用它们 要修改的XML示例如下-将替换/更新带有XXXXX的
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以使用列表[]中的项目进行更新?对于此类工作,我始终建议使用,因为它有一个非常易于学习的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>
<TrdCaptRpt RptID="10000001" TransTyp="0">
<RptSide Side="1" Txt1="Updated">
<Pty ID="Updated" R="1" />
</RptSide>
</TrdCaptRpt>
非常感谢,一旦我最终让BS正确安装,您的建议就起作用了。我对其他方法很感兴趣,有没有使用标准eTree命令的方法?@NickH我用ElementTree
更新了我的答案,只做了一点小小的修改。这个解决方案非常适合我的需要,我修改了set命令以使用定义列表中的索引,并将fromstring替换为指向XML文件的etree.parse。非常感谢你的建议!!!
<TrdCaptRpt RptID="10000001" TransTyp="0">
<RptSide Side="1" Txt1="Updated">
<Pty ID="Updated" R="1" />
</RptSide>
</TrdCaptRpt>