使用XML.etree.ElementTree更改XML属性的值



我有一个这样的xml。我不是分享完整的,而是一个片段

<ALLINVENTORYENTRIES.LIST>
<STOCKITEMNAME>Item1--1ltr</STOCKITEMNAME>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<ISLASTDEEMEDPOSITIVE>No</ISLASTDEEMEDPOSITIVE>
<ISAUTONEGATE>No</ISAUTONEGATE>
<ISCUSTOMSCLEARANCE>No</ISCUSTOMSCLEARANCE>
<ISTRACKCOMPONENT>No</ISTRACKCOMPONENT>
<ISTRACKPRODUCTION>No</ISTRACKPRODUCTION>
<ISPRIMARYITEM>No</ISPRIMARYITEM>
<ISSCRAP>No</ISSCRAP>
<RATE>1805.08/pc</RATE>
<AMOUNT>36101.60</AMOUNT>
<ACTUALQTY> 20 pc</ACTUALQTY>
<BILLEDQTY> 20 pc</BILLEDQTY>
<INCLVATRATE>2129.99/pc</INCLVATRATE>
<BATCHALLOCATIONS.LIST>
<MFDON>20220813</MFDON>
<GODOWNNAME>Main Location</GODOWNNAME>
<BATCHNAME>ABCDEF</BATCHNAME>
<DESTINATIONGODOWNNAME>Main Location</DESTINATIONGODOWNNAME>
<INDENTNO/>
<ORDERNO/>
<TRACKINGNUMBER/>
<DYNAMICCSTISCLEARED>No</DYNAMICCSTISCLEARED>
<AMOUNT>36101.60</AMOUNT>
<ACTUALQTY> 20 pc</ACTUALQTY>
<BILLEDQTY> 20 pc</BILLEDQTY>
<INCLVATRATE>2129.99/pc</INCLVATRATE>
<EXPIRYPERIOD JD="44785" P="31-Aug-24">31-Aug-24</EXPIRYPERIOD>
<ADDITIONALDETAILS.LIST>        </ADDITIONALDETAILS.LIST>
<VOUCHERCOMPONENTLIST.LIST>        </VOUCHERCOMPONENTLIST.LIST>
</BATCHALLOCATIONS.LIST>
<ACCOUNTINGALLOCATIONS.LIST>
<OLDAUDITENTRYIDS.LIST TYPE="Number">
<OLDAUDITENTRYIDS>-1</OLDAUDITENTRYIDS>
</OLDAUDITENTRYIDS.LIST>
<LEDGERNAME>Sales</LEDGERNAME>
<CLASSRATE>100.00000</CLASSRATE>
<GSTCLASS/>
<GSTOVRDNNATURE>Sales Taxable</GSTOVRDNNATURE>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<LEDGERFROMITEM>No</LEDGERFROMITEM>
<REMOVEZEROENTRIES>No</REMOVEZEROENTRIES>
<ISPARTYLEDGER>No</ISPARTYLEDGER>
<ISLASTDEEMEDPOSITIVE>No</ISLASTDEEMEDPOSITIVE>
<ISCAPVATTAXALTERED>No</ISCAPVATTAXALTERED>
<ISCAPVATNOTCLAIMED>No</ISCAPVATNOTCLAIMED>
<AMOUNT>36101.60</AMOUNT>
<SERVICETAXDETAILS.LIST>        </SERVICETAXDETAILS.LIST>
<BANKALLOCATIONS.LIST>        </BANKALLOCATIONS.LIST>
<BILLALLOCATIONS.LIST>        </BILLALLOCATIONS.LIST>
<INTERESTCOLLECTION.LIST>        </INTERESTCOLLECTION.LIST>
<OLDAUDITENTRIES.LIST>        </OLDAUDITENTRIES.LIST>
<ACCOUNTAUDITENTRIES.LIST>        </ACCOUNTAUDITENTRIES.LIST>
<AUDITENTRIES.LIST>        </AUDITENTRIES.LIST>
<INPUTCRALLOCS.LIST>        </INPUTCRALLOCS.LIST>
<DUTYHEADDETAILS.LIST>        </DUTYHEADDETAILS.LIST>
<EXCISEDUTYHEADDETAILS.LIST>        </EXCISEDUTYHEADDETAILS.LIST>
<RATEDETAILS.LIST>        </RATEDETAILS.LIST>
<SUMMARYALLOCS.LIST>        </SUMMARYALLOCS.LIST>
<STPYMTDETAILS.LIST>        </STPYMTDETAILS.LIST>
<EXCISEPAYMENTALLOCATIONS.LIST>        </EXCISEPAYMENTALLOCATIONS.LIST>
<TAXBILLALLOCATIONS.LIST>        </TAXBILLALLOCATIONS.LIST>
<TAXOBJECTALLOCATIONS.LIST>        </TAXOBJECTALLOCATIONS.LIST>
<TDSEXPENSEALLOCATIONS.LIST>        </TDSEXPENSEALLOCATIONS.LIST>
<VATSTATUTORYDETAILS.LIST>        </VATSTATUTORYDETAILS.LIST>
<COSTTRACKALLOCATIONS.LIST>        </COSTTRACKALLOCATIONS.LIST>
<REFVOUCHERDETAILS.LIST>        </REFVOUCHERDETAILS.LIST>
<INVOICEWISEDETAILS.LIST>        </INVOICEWISEDETAILS.LIST>
<VATITCDETAILS.LIST>        </VATITCDETAILS.LIST>
<ADVANCETAXDETAILS.LIST>        </ADVANCETAXDETAILS.LIST>
</ACCOUNTINGALLOCATIONS.LIST>
<DUTYHEADDETAILS.LIST>       </DUTYHEADDETAILS.LIST>
<SUPPLEMENTARYDUTYHEADDETAILS.LIST>       </SUPPLEMENTARYDUTYHEADDETAILS.LIST>
<TAXOBJECTALLOCATIONS.LIST>       </TAXOBJECTALLOCATIONS.LIST>
<REFVOUCHERDETAILS.LIST>       </REFVOUCHERDETAILS.LIST>
<EXCISEALLOCATIONS.LIST>       </EXCISEALLOCATIONS.LIST>
<EXPENSEALLOCATIONS.LIST>       </EXPENSEALLOCATIONS.LIST>
<UDF:FSITEMPESTUDF.LIST DESC="`FSItempestUDF`" ISLIST="YES" TYPE="String" INDEX="1006">
<UDF:FSITEMPESTUDF DESC="`FSItempestUDF`">-</UDF:FSITEMPESTUDF>
</UDF:FSITEMPESTUDF.LIST>
<UDF:FSITEMIN_UDF.LIST DESC="`FSitemIn_UDF`" ISLIST="YES" TYPE="String" INDEX="1012">
<UDF:FSITEMIN_UDF DESC="`FSitemIn_UDF`">-</UDF:FSITEMIN_UDF>
</UDF:FSITEMIN_UDF.LIST>
<UDF:SOLDFORWHICHCROP.LIST DESC="`SoldForWhichCrop`" ISLIST="YES" TYPE="String" INDEX="8897">
<UDF:SOLDFORWHICHCROP DESC="`SoldForWhichCrop`">-</UDF:SOLDFORWHICHCROP>
</UDF:SOLDFORWHICHCROP.LIST>
</ALLINVENTORYENTRIES.LIST>

我想将RATE的值设置为新值

我尝试了低于代码

import xml.etree.ElementTree as ET
tree = ET.parse(r'Book1.xml')
root = tree.getroot()
for i in root[1][0][1][0][0]:
#print(i.tag)
if i.tag == "ALLINVENTORYENTRIES.LIST":
for elem in i:
#print(elem.tag)
rpt_side = i.find('RATE')
print(rpt_side.text)
rpt_side.set(rpt_side.tag, "2000")
#print(a)
print(rpt_side.text)
#print(elem)

它正在增加的新价值

<RATE RATE="2000">1805.08/pc</RATE>

我想要与我的xml 中的值相同的值

ElementTree中的set()方法将元素属性的属性值设置为特定值。如果属性不存在,该方法将创建它。

所以

rpt_side.set(rpt_side.tag, "2000")

创建具有与所讨论的元素的名称(rpt_side.tag)(即RATE(相等的名称的属性,并将2000分配给它作为属性值。

你可能正在寻找的是这样的东西:

rpt_side.text="2000"

除了新的文本值之外,它应该保持元素不变。

最新更新