[英]Change Child Node Values by inserting parent nodes iterative
import xml.etree.ElementTree as xml
root = xml.Element('XmlToTs')
Eit = xml.Element('Eit')
root.append(Eit)
xml.SubElement(Eit, "Pid").text = "18"
Event = xml.Element("Event")
xml.SubElement(Event, "EventId").text = "12677"
Short = xml.SubElement(Event, "ShortEventDescriptor")
xml.SubElement(Short, "Iso639LanguageCode").text = "deu"
xml.SubElement(Short, "EventName").text = "Talk am Teich"
xml.SubElement(Short, "Text").text = "Heute wird mit den Enten getalked"
EID=12500
Eit.append(Event)
Eit.append(Event)
Eit.append(Event)
for EventId in Eit.iter('EventId'):
EventId.text = str(EID)
EID=EID+1
我想有多個帶有默認子級的“事件”節點。 之后,我要遍歷所有內容並修改其子文本。
但是目前iter循環為所有EventId提供了12502
謝謝克里斯蒂安
當調用Event = xml.Element("Event")
時,可以創建Event元素的一個實例。 通過將此實例傳遞給.append()
方法並調用它(在您的情況中為3次),ElementTree追加了三個EventId-Elments,但是實際上內存中只有一個 EventId-Element。 您可以使用以下幾行進行檢查:
import xml.etree.ElementTree as xml
root = xml.Element('XmlToTs')
Eit = xml.Element('Eit')
root.append(Eit)
xml.SubElement(Eit, "Pid").text = "18"
Event = xml.Element("Event")
xml.SubElement(Event, "EventId").text = "12677"
Short = xml.SubElement(Event, "ShortEventDescriptor")
xml.SubElement(Short, "Iso639LanguageCode").text = "deu"
xml.SubElement(Short, "EventName").text = "Talk am Teich"
xml.SubElement(Short, "Text").text = "Heute wird mit den Enten getalked"
Eit.append(Event)
Eit.append(Event)
Eit.append(Event)
for EventId in Eit.iter('EventId'):
print(EventId)
輸出是這樣的:
<ELment 'EventId' at 0x17ee170>
<ELment 'EventId' at 0x17ee170>
<ELment 'EventId' at 0x17ee170>
如您所見, 所有 EventId元素都具有相同的內存加法器!
當您通過.iter()
方法遍歷所有EventId-Tags時,可以在XML代碼中找到ElmentTree,在每次迭代中,您都在訪問相同的對象,即相同的 EventId-Tag。 這就是為什么將每個EventId-Element的所有文本屬性分配給相同的數字12502的原因; 12500增加了兩次。
簡而言之,您需要創建多個EventId實例。 例如在for循環中:
for _ in range(3):
Event = xml.Element("Event")
xml.SubElement(Event, "EventId").text = "12677"
Short = xml.SubElement(Event, "ShortEventDescriptor")
xml.SubElement(Short, "Iso639LanguageCode").text = "deu"
xml.SubElement(Short, "EventName").text = "Talk am Teich"
xml.SubElement(Short, "Text").text = "Heute wird mit den Enten getalked"
Eit.append(Event)
之后,您可以運行您的代碼...
EID=12500
for EventId in Eit.iter('EventId'):
EventId.text= str(EID)
EID += 1
...而且效果很好! :)
完整的源代碼:
import xml.etree.ElementTree as xml
from xml.dom import minidom
root = xml.Element('XmlToTs')
Eit = xml.Element('Eit')
root.append(Eit)
xml.SubElement(Eit, "Pid").text = "18"
for _ in range(3):
Event = xml.Element("Event")
xml.SubElement(Event, "EventId").text = "12677"
Short = xml.SubElement(Event, "ShortEventDescriptor")
xml.SubElement(Short, "Iso639LanguageCode").text = "deu"
xml.SubElement(Short, "EventName").text = "Talk am Teich"
xml.SubElement(Short, "Text").text = "Heute wird mit den Enten getalked"
Eit.append(Event)
EID=12500
for EventId in Eit.iter('EventId'):
EventId.text= str(EID)
EID += 1
#print the generated XML code
def prettify(elem):
"""Return a pretty-printed XML string for the Element.
"""
rough_string = xml.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent=" ")
print(prettify(Eit))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.