[python, xml] По-быстрому взять кое-что из xml-файла
re, если контекст не сильно важен.
не ботая всякое там хитрое про sax или dom
http://www.somebits.com/weblog/tech/python/xpath.html пример довольно вдохновляющий:
Осталось только написать XPath запрос для твоего случая и подставить вместо '//@xmlUrl'. В твоём случае будет что-то типа:
Кошерный способ --- это XPath. Вот тут: import libxml2
doc = libxml2.parseFile('foo.opml')
for url in doc.xpathEval('//@xmlUrl'):
print url.content
Осталось только написать XPath запрос для твоего случая и подставить вместо '//@xmlUrl'. В твоём случае будет что-то типа:
import libxml2
doc = libxml2.parseFile('foo.xml')
v = doc.xpathEval('//ScannerSetVariant')
re, если контекст не сильно важен.если в xml нет комментириев или секций CDATA с ентим тегом то этот способ наверна идеален
Кошерный способ --- это XPathэтот кошерный способ не подходит топикстартеру
у него "довольно большой xml"
а ты тут полное DOM дерево строишь
это может занять долгое время и может не хватить памяти
SAX тут гораздо лучше
c XPATH получается парсинг полностью всего документа, загрузка дерева тегов в память, потом относительно быстрое нахождение нужного элемента
SAX - это фактически пробежка подряд по всем тегам до нужного
Спасибо, похоже, что этот способ мне и нужен. Как выяснилось, файл не очень большой, так что проблем с чтением его в память не должно возникнуть.
у него "довольно большой xml"Построение полного DOM дерева отлично подходит для "довольно больших XML". Оно даже для "очень больших XML" подходит. Сам проверял. Согласен, что с "огромными" и "гигантскими" XML могут быть проблемы.
а ты тут полное DOM дерево строишь
Однако в данном случае кошерным является использование XPath а не полная загрузка XML в память. Просто в примере, который нагуглился первым, XPath применялся к XML, полностью загруженному в память.
Просто в примере, который нагуглился первым, XPath применялся к XML, полностью загруженному в память.видел штуки типа облегченного DOM парсинга для XPath, типа DOM дерево создается из легковесных ридонли объектов
а можешь кинуть примеры где XPath без полного предварительного DOM парсинга?
Оставить комментарий
july
Кто бы мне помог — я никогда этого не делал: мне нужно в пайтоне из довольно большого xml файла взять только одну вещь.В файле есть тег (среди прочих):
Мне нужно только значение Variant.
Есть ли способ это сделать по-быстрому, не ботая всякое там хитрое про sax или dom и прочее про xml (я в этом совершенно не разбираюсь)?