проанализировать несколько XML-файлов из нескольких папок, имеющих одинаковый формат, и сохранить текст определенного узла в переменной

#xml #python-2.7 #pandas #xml-parsing

#xml #python-2.7 #pandas #xml-синтаксический анализ

Вопрос:

У меня есть код для анализа нескольких XML-файлов из разных каталогов:

 for file in glob.iglob(os.path.join(dir, '100/**/*.xml')):
    with open(file) as f:
        data = etree.parse(f)
  

Формат XML-файлов:

 <us1>
<us2>
<p-r>
<document-id>
<country>US</country>
<doc-number>07640598</doc-number>
<kind>B1</kind>
<date>20100105</date>
</document-id>
</p-r>
<ab>
<c>
<document-id>
<country>US1</country>
<doc-number>07640598989834</doc-number>
<kind>B5</kind>
<date>20100106</date>
</document-id>
</c>
</ab>
</us2></us1>
  

Теперь я хочу извлечь текст в «doc-number» между всеми XML-файлами, присутствующими в каталоге, и сохранить в переменной .. т.е. извлеченные данные — 07640598.
Как мне извлечь выбранные значения и сохранить их в переменной??

Ответ №1:

Вы можете использовать простое выражение XPath для получения элемента с определенным именем ElementTree , например :

 doc_no = data.find('.//doc-number')
if doc_no is not None:
    print doc_no.text
  

Небольшое изменение в выражении XPath, если вы хотели получить doc-number это дочернее значение p-r :

 doc_no = data.find('.//p-r/doc-number')
  

Комментарии:

1. да, это один из способов. Но что я хочу получить «doc_no» из тега «p-r», а не из других тегов??

2. @curiouscoder Нет проблем. Не забудьте принять ответ ( подробнее о принятии ответа )