I have the following XML file as input:
<Test>
<callEvents>
<moc>
<causeForTermination>0</causeForTermination>
<serviceCode>
<teleServiceCode>11</teleServiceCode>
</serviceCode>
<dialledDigits>5555555</dialledDigits>
<connectedNumber>77777</connectedNumber>
</moc>
<moc>
<causeForTermination>0</causeForTermination>
<serviceCode>
<teleServiceCode>11</teleServiceCode>
</serviceCode>
<dialledDigits>2222222</dialledDigits>
</moc>
</callEvents>
<callEventsCount>100</callEventsCount>
</Test>
I want to output all the values for dialledDigits. However, my code only displays the first instance of dialledDigits.
dialledDigits {} 5555555
My desired output should contain both instances.
dialledDigits {} 5555555
dialledDigits {} 2222222
Here is my code
import xml.etree.ElementTree as ET
tree = ET.parse('as.xml')
root = tree.getroot()
callevent=root.find('callEvents')
Moc1=callevent.find('moc')
for node in Moc1.getiterator():
if node.tag=='dialledDigits':
print node.tag, node.attrib, node.text
You can also write an XPath expression. Just 2 lines instead of 5 and a single loop:
for node in tree.findall('.//callEvents/moc/dialledDigits'):
print node.tag, node.attrib, node.text
Demo:
>>> import xml.etree.ElementTree as ET
>>>
>>>
>>> tree = ET.parse('as.xml')
>>> root = tree.getroot()
>>>
>>> for node in tree.findall('.//callEvents/moc/dialledDigits'):
... print node.tag, node.attrib, node.text
...
dialledDigits {} 5555555
dialledDigits {} 2222222
Use findall
:
moc1 = callevent.findall('moc')
for moc in moc1:
for node in moc.getiterator():
if node.tag=='dialledDigits':
print node.tag, node.attrib, node.text
Output:
dialledDigits {} 5555555
dialledDigits {} 2222222
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With