Python 3 XML найти все пустой вывод - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь выяснить следующую проблему:

Я хочу получить атрибут 'type' тега (теги cpe-23 являются необязательными и имеют ЛЮБОЙ тип в схеме XML)

<cpe-23:deprecated-by ... type="NAME_CORRECTION"/>

Чтение других вопросов в stackoverflow привело меня к следующему коду:

import xml.etree.ElementTree as ET
tree = ET.parse(".../official-cpe-dictionary_v2.3.xml")
root = tree.getroot()

for child in root.findall('cpe-item/cpe-23:cpe23-item/cpe-23:deprecation/cpe-23:deprecated-by',
                      namespaces={'cpe-23': 'http://scap.nist.gov/schema/cpe-extension/2.3'}):

    print(child.attrib['name'], child.attrib['type'])

Моя проблема сейчас в том, что я просто получаю пустой вывод, и моя программа останавливается с кодом: 0

Есть идеи, как решить эту проблему?

Заранее большое спасибо!

Источник (XML-файл):

<cpe-list ...>
    <generator>
       ...
    </generator>
    <cpe-item name="cpe:/a:3com:tippingpoint_ips_tos:2.2.3" deprecated="true" deprecation_date="2010-12-28T17:36:02.240Z">
        <title xml:lang="en-US">3Com TippingPoint IPS TOS 2.2.3</title>
        <cpe-23:cpe23-item name="cpe:2.3:a:3com:tippingpoint_ips_tos:2.2.3:*:*:*:*:*:*:*">
          <cpe-23:deprecation date="2010-12-28T12:36:02.240-05:00">
            <cpe-23:deprecated-by name="cpe:2.3:o:3com:tippingpoint_ips_tos:2.2.3:*:*:*:*:*:*:*" type="NAME_CORRECTION"/>
          </cpe-23:deprecation>
        </cpe-23:cpe23-item>
    </cpe-item>
    <cpe-item ...>
        ...
    </cpe-item>
    ...
</cpe-list>

1 Ответ

0 голосов
/ 27 мая 2018

Я смог разобраться сам, читая документацию библиотеки.Причиной отсутствия вывода было то, что функция Element.findall () просматривает только дочерние элементы direkt."Cpe-23: cp23-item" был внуком корневого узла.

...