parser library example etree dict create python xml xml-parsing elementtree

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