我想在xml文件中創建幾個element.text。我成功地獲得了兩個列表,第一個將字符串重新組合成long long element.text作爲str(long_name),第二個重新組合後成爲troncation(short_name)。如何用lxml替換XML上的文本?
現在我想更換我的XML的element.text,我嘗試了一些劇本,但我surrended與功能readlines方法(),我想找到LXML類似的解決方案,因爲這代碼工作:
txt = open('IF_Generic.arxml','r')
Lines = txt.readlines()
txt.close()
txt = open('IF_Genericnew.arxml','w')
for e in range(len(long_name)) :
for i in range(len(Lines)) :
if (long_name[e] in Lines[i]) == True :
Lines[i] = Lines[i].replace(long_name[e],short_name[e])
for i in Lines :
txt.write(i)
txt.close()
我嘗試這樣做,但它不工作:
f = open('IF_Generic.arxml')
arxml = f.read()
f.close()
tree = etree.parse(StringIO(arxml))
for e,b in enumerate(long_name) :
context = etree.iterparse(StringIO(arxml))
for a,i in context:
if not i.text:
pass
else:
if (b in i.text) == True :
i.text = short_name[e]
obj_arxml = etree.tostring(tree,pretty_print=True)
f = open('IF_Genericnew.arxml','w')
f.write(obj_arxml)
f.close()
假設列表LONG_NAME的第一個元素是RoutineServices_EngMGslLim_NVMID03
<BALISE_A>
<BALISE_B>
<SHORT-NAME>RoutineServices_EngMGslLim_NVMID03</SHORT-NAME>
</BALISE_B>
</BALISE_A>
<BALISE_C>
<POSSIBLE-ERROR-REF DEST="APPLICATION-ERROR">/Interfaces/RoutineServices_EngMGslLim_NVMID03/E_NOT_OK</POSSIBLE-ERROR-REF>
<SHORT-NAME>Blah_Bleh_Bluh</SHORT-NAME>
</BALISE_C>
列表SHORT_NAME的第一個元素是RoutineServices_EngMGslLim_NV
<BALISE_A>
<BALISE_B>
<SHORT-NAME>RoutineServices_EngMGslLim_NV</SHORT-NAME>
</BALISE_B>
</BALISE_A>
<BALISE_C>
<POSSIBLE-ERROR-REF DEST="APPLICATION-ERROR">/Interfaces/RoutineServices_EngMGslLim_NV/E_NOT_OK</POSSIBLE-ERROR-REF>
<SHORT-NAME>Blah_Bleh_Bluh</SHORT-NAME>
</BALISE_C>
我想這
P.S:我使用Python 2.7.9
提前感謝大家!
@mzjn爲了簡化,我們會說我有2個列表,我想瀏覽我的xml中的所有element.text並將其替換。列表long_name是知道我是否需要替換文本的標準,而列表short_name是我想要放置的新文本。我不能給你這個xml文件,因爲它就像500k行。 – Noxos
@mzjn我試圖儘可能小 – Noxos