Nic*_*k H 7 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>
Run Code Online (Sandbox Code Playgroud)
预期结果将是,例如:
<TrdCaptRpt RptID="10000001" TransTyp="0">
<RptSide Side="1" Txt1="12345">
<Pty ID="ABCDE" R="1"/>
</RptSide>
</TrdCaptRpt>
Run Code Online (Sandbox Code Playgroud)
如何使用etree命令更改基本XML以使用列表[]中的项目进行更新?
jco*_*ado 13
对于这类工作,我总是建议,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
Run Code Online (Sandbox Code Playgroud)
示例输出:
<trdcaptrpt rptid="10000001" transtyp="0">
<rptside side="1" txt1="Updated">
<pty id="Updated" r="1">
</pty></rptside>
</trdcaptrpt>
Run Code Online (Sandbox Code Playgroud)
编辑: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)
Run Code Online (Sandbox Code Playgroud)
示例输出:
<TrdCaptRpt RptID="10000001" TransTyp="0">
<RptSide Side="1" Txt1="Updated">
<Pty ID="Updated" R="1" />
</RptSide>
</TrdCaptRpt>
Run Code Online (Sandbox Code Playgroud)