Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python etree更新XML元素和属性值_Python_Xml_Elementtree_Xml.etree - Fatal编程技术网

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

使用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的

我试图使用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以使用列表[]中的项目进行更新?

对于此类工作,我始终建议使用,因为它有一个非常易于学习的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>