Как упростить мой код - извлечь все значения узлов с тем же именем тега XML - PullRequest
0 голосов
/ 30 ноября 2018

Например, вот данные XML:

   <SOAP-ENV:Body>
     <reportList>
        <reportName>report 1</reportName>
     </reportList>
     <reportList>
        <reportName>report 2</reportName>
     </reportList>
     <reportList>
        <reportName>report 3</reportName>
     </reportList>
   </SOAP-ENV:Body>

Вот мой код для извлечения значений узлов всех reportName , и это работает.

import xml.dom.minidom
...
node = xml.dom.minimom.parseString(xml_file.text).documentElement
reportLists = node.getElementsByTagName('reportList')

reports = []
for reportList in reportLists:
    reportObj = reportList.getElementsByTagName('reportName')[0]
    reports.append(reportObj)

for report in reports:
    nodes = report.childNodes
    for node in nodes:
        if node.nodeType == node.TEXT_NODE:
            print (node.data)

результат:

report 1
report 2
report 3

Хотя это работает, я хочу упростить код.Как добиться того же результата, используя более короткий код?

1 Ответ

0 голосов
/ 30 ноября 2018

Вы можете упростить оба цикла for, используя списки:

import xml.dom.minidom
node = xml.dom.minidom.parseString(xml_file.text).documentElement
reportLists = node.getElementsByTagName('reportList')

reports = [report.getElementsByTagName('reportName')[0] for report in reportLists]
node_data = [node.data for report in reports for node in report.childNodes if node.nodeType == node.TEXT_NODE]

node_data теперь список, содержащий информацию, которую вы печатали.

...