Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 28.05.2016
Сообщений: 17

Парсинг xml с глубокой вложенностью

09.10.2017, 09:05. Показов 3456. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Недавно начал осваивать Python и столкнулся с задачей распарсить файл xml с неизвестной вложенностью.
Причем в результате парсинга необходимо получить массив (словарь или список) всех дочерних элементов.
Например, как из вот этого:

Code
1
2
3
4
5
6
7
8
9
10
11
12
<response>...<results>...<grouping>...<group>...
    <doc>...
         <title>
             Parent
             <hlword>Variable 1</hlword>
                       <variable>Last Variable 1</variable>
             <hlword>Variable 2</hlword>
             word4
          </title>
          ...
    </doc>
</group>...</grouping>...</results>...</response>...
Получить что то вроде:

Parent ==> Variable 1 ==> Last Variable 1
Parent ==> Variable 2

пробовал что-то типа такого:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from lxml import etree
 
def get_node(node, lst):
    
    attrib = ''
    d = node.attrib
    if d:
        d = d.get('text')
        attrib = ','.join([i + ':' + d[i] for i in d])
 
    lst.append([attrib])
 
    for n in node:
        get_node(n, lst)
 
 
tree = etree.parse("/test.xml")
out = []
get_node(tree.getroot(), out)
на выходе получилось совсем не то, что хотелось. Направьте меня пожалуйста на путь истиный...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2017, 09:05
Ответы с готовыми решениями:

Парсинг сайта с глубокой вложенностью
Есть сайт http://www.edu.ru/schools/catalog/ Каталог всех школ РФ по регионам. Можно ли каким-то образом (средствами php) выдрать...

Парсинг xml с очень большой вложенностью
Добрый день! Есть xml вида &lt;hieder&gt; &lt;tag1&gt;fvdfg&lt;/tag1&gt; &lt;tag2&gt;bnn&lt;/tag1&gt; &lt;tag3&gt; &lt;tag4&gt;fvbfhg&lt;/tag4&gt; ...

Парсинг объекта с неограниченной вложенностью
Всем привет! Я пытаюсь написать рекурсивную функцию, которая могла бы приводить получаемый с сервера объект к нужному виду: { ...

3
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.10.2017, 14:07
Цитата Сообщение от MIKE1985 Посмотреть сообщение
распарсить файл xml
Судя по коду, про xpath вы никогда не слышали?
0
1 / 1 / 0
Регистрация: 28.05.2016
Сообщений: 17
10.10.2017, 05:11  [ТС]
Откровенно говоря я вообще впервые столкнулся с таким форматом как *.xml. На данный момент самым оптимальным решением для моей задачи является открытие файла xml в excel, где получается табличная структура вида как во вложении, после чего получаю эти данные в pandas. Однако этот вариант становится вообще не вариантом для больших по размеру файлов *.xml. Хотя конечная цель и есть получение такой структуры данных как в excel для дальнейшей обработки. Я потому и спросил есть ли способ попроще. Грубо говоря не зная структуры самого *.xml файла вытащить из него значения в какой-либо массив. И да, про xpath я никогда не слышал...
Не моглы бы Вы привести мне какой-нибудь пример с использованием этого языка запросов применительно к python и lxml?
Миниатюры
Парсинг xml с глубокой вложенностью  
0
1 / 1 / 0
Регистрация: 28.05.2016
Сообщений: 17
10.10.2017, 07:31  [ТС]
Попробовал сделать так, но получил list с элементами, а не значения имен...
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from lxml import etree
import xml.etree.cElementTree as ET
 
def get_node(node, lst):
    lst.append([node.xpath('ancestor-or-self::*')])
    for n in node:
        get_node(n, lst)
 
tree = etree.parse("Путь к файлу")
out = []
get_node(tree.getroot(), out)
 
print("Result ",out)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2017, 07:31
Помогаю со студенческими работами здесь

Дан XML-документ с двухуровневой вложенностью
Дан XML-документ с двухуровневой вложенностью. У элемента &quot;Пользователь&quot;присутствует атрибут имя и следующие элементы:...

Десериализация XML файла с многократной вложенностью
Здравствуйте. Возникла следующая проблема. Есть XML файл с ограниченным количеством типовых блоков. Например в файле ниже может...

Дан XML-документ с двухуровневой вложенностью
Дан XML-документ с двухуровневой вложенностью. XML-документ содержит несколько элементов, внутри которых представлено различное...

Десериализация XML файла с многократной вложенностью
Здравствуйте. Столкнулся с проблемой при десериализации XML файла. Облазил кучу форумов и документации, подскажите хоть направление...

Преобразовать XML с рекурсивной вложенностью объектов в Java объект и обратно
У меня есть XML следующего вида: &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt; &lt;Trees&gt; &lt;Tree Id=&quot;1&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru