python - library - Obteniendo nodo hijo usando xml.etree.ElementTree
python xml to dict (3)
También puede escribir una expresión XPath . Solo 2 líneas en lugar de 5 y un solo bucle:
for node in tree.findall(''.//callEvents/moc/dialledDigits''):
print node.tag, node.attrib, node.text
Manifestación:
>>> 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
Aquí está el archivo de entrada
<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>
Quiero resultados similares a donde se muestra dialledDigits. De alguna manera estoy mostrando solo 1 de ellos. Me gusta esto
dialledDigits {} 5555555
Aquí está mi deseo de salida
dialledDigits {} 5555555
dialledDigits {} 2222222
Aquí está mi código
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
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
Salida:
dialledDigits {} 5555555
dialledDigits {} 2222222
find()
devolverá el primer objeto de etiqueta, así que use finadall()
que devuelve todos los objetos de etiqueta`
>>> Moc1=callevent.find(''moc'')
>>> Moc1
<Element ''moc'' at 0x869a2ac>
>>> Moc1=callevent.findall(''moc'')
>>> Moc1
[<Element ''moc'' at 0x869a2ac>, <Element ''moc'' at 0x869a4ec>]
>>>
Iterato en eso:
>>> Mocs=callevent.findall(''moc'')
>>> for moc in Mocs:
... for node in moc.getiterator():
... if node.tag==''dialledDigits'':
... print node.tag, node.attrib, node.text
...
dialledDigits {} 5555555
dialledDigits {} 2222222