Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разобрать xml файл... ...используя XPath 
V
    Опции темы
ols
Дата 31.8.2006, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.8.2006
Где: Прага

Репутация: нет
Всего: 1



Есть xml файл. 
Нужно используя XPath выражение выбрать в некую переменную из этого файла значение некоторого узла... 

PyXML поставил, но с ходу что-то найти пример не могу. 

условно содержимое файла: 
Код

<a>
  <b>ASD</b>
</a>


Xpath выражение: 
Код
/a/b/text()



PM MAIL WWW   Вверх
albertn
Дата 31.8.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



А зачем PyXML, по-моему у питона есть и своя нормальная библиотека для работы с XML.
Описание модуля:
http://docs.python.org/lib/module-xml.dom.minidom.html
http://docs.python.org/lib/dom-objects.html
Пример:
http://docs.python.org/lib/dom-example.html
PM WWW ICQ   Вверх
albertn
Дата 31.8.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



А если в PyXML, то выглядеть должно где-то так
Код

from xml import xpath
nodes = xpath.Evaluate('quotation/note', doc.documentElement)

PM WWW ICQ   Вверх
ols
Дата 31.8.2006, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.8.2006
Где: Прага

Репутация: нет
Всего: 1



Цитата(albertn @ 31.8.2006,  10:00)
А зачем PyXML, по-моему у питона есть и своя нормальная библиотека для работы с XML.

не знаю зачем... я тока начинаю разбираться с питоном... 
нашел вот message 
и решил что нужно - ведь мне именно XPath нужен. 

PM MAIL WWW   Вверх
albertn
Дата 31.8.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(ols @ 31.8.2006,  10:24)
не знаю зачем... я тока начинаю разбираться с питоном... 
нашел вот message 
и решил что нужно - ведь мне именно XPath нужен.

Ну если именно XPath нужен, то да. Я кстати бегло просмотрел, эта библиотека просто добавляет несколько функций в основную библиотеку.
Честно говоря никогда не использовал XPath, и не видел в нем необходимости. Может и зря конечно, но не юзал, не знаю.
PM WWW ICQ   Вверх
ols
Дата 31.8.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.8.2006
Где: Прага

Репутация: нет
Всего: 1



Цитата(albertn @ 31.8.2006,  10:16)
А если в PyXML, то выглядеть должно где-то так
Код

from xml import xpath
nodes = xpath.Evaluate('quotation/note', doc.documentElement)

простите за глупый вопрос... 
а как в doc.documentElement  считать содержимое файла?

Добавлено @ 10:33 
Цитата(albertn @ 31.8.2006,  10:30)
Честно говоря никогда не использовал XPath, и не видел в нем необходимости. Может и зря конечно, но не юзал, не знаю.

да я к нему просто привык очень, честно говоря не знаю, как без него обходится smile 
в oracle без него никак smile 
PM MAIL WWW   Вверх
albertn
Дата 31.8.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(ols @ 31.8.2006,  10:30)
простите за глупый вопрос... 
а как в doc.documentElement  считать содержимое файла?

Если я не ошибаюсь, то должно выглядеть так:
Код

from xml.dom.minidom import parseString
text = """
<a>
  <b>ASD</b>
</a>
"""
doc = parseString(text)
res = xpath.Evaluate('/a/b/text()', doc.documentElement)

По-идее должно работать, проверить не могу.
PM WWW ICQ   Вверх
ols
Дата 31.8.2006, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.8.2006
Где: Прага

Репутация: нет
Всего: 1



получилось так: 
Код

from xml.dom.minidom import parse
from xml import xpath
fres = open('file_path/file.xml','r')
xres = parse(fres)
xvar = xpath.Evaluate('/a/b/text()',xres)
str(xvar)


но выводит он 
[<DOM Text node "ASD">]

а как вывести просто 
ASD
?
PM MAIL WWW   Вверх
albertn
Дата 31.8.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(ols @ 31.8.2006,  11:06)
но выводит он 
[<DOM Text node "ASD">]

а как вывести просто 
ASD
?

Вроде так:
Код

from xml.dom.minidom import parse
from xml import xpath
fres = open('file_path/file.xml','r')
xres = parse(fres)
xvar = xpath.Evaluate('/a/b/text()',xres)
print xvar.data


Это сообщение отредактировал(а) albertn - 31.8.2006, 11:15
PM WWW ICQ   Вверх
ols
Дата 31.8.2006, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.8.2006
Где: Прага

Репутация: нет
Всего: 1



не работает... smile 
PM MAIL WWW   Вверх
albertn
Дата 31.8.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(ols @ 31.8.2006,  11:18)
не работает... smile

А, точто, должно быть так:
Код

from xml.dom.minidom import parse
from xml import xpath
fres = open('file_path/file.xml','r')
xres = parse(fres)
xvar = xpath.Evaluate('/a/b/text()',xres)
print xvar.nodeValue

PM WWW ICQ   Вверх
J2A
Дата 31.8.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



Код

>>> from xml.dom.minidom import parse
>>> from xml import xpath            
>>> from cStringIO import StringIO
>>> xparse = parse(StringIO('<a><b>ASD</b></a>'))
>>> xvars = xpath.Evaluate('/a/b/text()', xparse)
>>> type(xvars)
<type 'list'>
>>> type(xvars[0])
<type 'instance'>
>>> xvars[0]
<DOM Text node "ASD">
>>> xvars[0].nodeValue
u'ASD'
>>> 

--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
ols
Дата 31.8.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.8.2006
Где: Прага

Репутация: нет
Всего: 1



Отлично! 
Спасибо всем большое smile  
Осталось запихнуть это всё в модуль чтобы больше не вспоминать   smile 


PM MAIL WWW   Вверх
albertn
Дата 31.8.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(J2A @ 31.8.2006,  11:25)
Код

>>> from xml.dom.minidom import parse
>>> from xml import xpath            
>>> from cStringIO import StringIO
>>> xparse = parse(StringIO('<a><b>ASD</b></a>'))
>>> xvars = xpath.Evaluate('/a/b/text()', xparse)
>>> type(xvars)
<type 'list'>
>>> type(xvars[0])
<type 'instance'>
>>> xvars[0]
<DOM Text node "ASD">
>>> xvars[0].nodeValue
u'ASD'
>>> 

Сто-пудов, этож список. У меня просто вариантов небыло проверить, а на вывод не обратил внимание.
PM WWW ICQ   Вверх
ols
Дата 31.8.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.8.2006
Где: Прага

Репутация: нет
Всего: 1



готово. мой первый класс на питоне! 
Назначение: Читает файл ресурсов, написанный в xml, и возвращает нужную ноду по XPath.

Прошу заценить и сильно не ругаться: 

Код

# resourse_parse.py
# Parse an xml resourse file

from xml.dom.minidom import parse
from xml import xpath

class Resourse:
    def __init__(self, ini_path):
        self.bind_resourse(ini_path)

    def bind_resourse(self, res_path):
    # Binds a resourse with a real file
        fres = open(res_path, 'r')
        self.xres = parse(fres)
        fres.close()        

    def extract_item(self, entry_path):
    # Extracts value from resourse file by XPath expression 
        xvar = xpath.Evaluate(entry_path, self.xres)
        if xvar:
            return xvar[0].nodeValue      


Пример использования: 
Код

import resourse_parse
menu_res = resourse_parse.Resourse('res/main_menu_res.xml')
iAbout = menu_res.extract_item('/resourse/main_menu/item[@name="about"]/text()')
print iAbout


PS
Я случайно велосипед не изобрел?

Это сообщение отредактировал(а) ols - 31.8.2006, 13:23
PM MAIL WWW   Вверх
albertn
Дата 31.8.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(ols @  31.8.2006,  12:44 Найти цитируемый пост)
Я случайно велосипед не изобрел?

Ну если так посмотреть, то ты ничего не изобрел smile

А по сути комманде parse по-моему можно просто передать имя файла.
Получать только значение nodeValue тоже не всегда надо.

PS. Если это твой первый класс на питоне, то все вроде нормально, но с точки зрения применения разве что в некоторых случаях сократит запись, хотя и не факт:
Код

import xml, xml.dom.minidom
print xml.xpath.Evaluate('/resourse/main_menu/item[@name="about"]/text()',xml.dom.minidom.parse('res/main_menu_res.xml')).nodeValue

PM WWW ICQ   Вверх
ols
Дата 31.8.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.8.2006
Где: Прага

Репутация: нет
Всего: 1



Спасибо. 
В питоне 3-й день... до этого кроме как на PL/SQL несколько лет уж ни на чем не писал... а там это делается совсем иначе
поэтому и вопросов куча... 

PM MAIL WWW   Вверх
pythonwin
Дата 31.8.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



ols, прерасно для 3-х дней.


Цитата(ols @  31.8.2006,  20:32 Найти цитируемый пост)
до этого кроме как на PL/SQL несколько лет уж ни на чем не писал

а какая СУБД?
PM WWW GTalk Jabber   Вверх
J2A
Дата 31.8.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



Цитата(pythonwin @ 31.8.2006,  17:52)
ols, прерасно для 3-х дней.


Цитата(ols @  31.8.2006,  20:32 Найти цитируемый пост)
до этого кроме как на PL/SQL несколько лет уж ни на чем не писал

а какая СУБД?

Глупый вопрос. PL/SQL - это однозначно Oracle.
--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
pythonwin
Дата 31.8.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(J2A @  31.8.2006,  22:08 Найти цитируемый пост)
 PL/SQL - это однозначно Oracle. 


а я думал что и другие SQL-ые СУБД могут поддерживать PL/SQL
например PostgreSQL
http://www.postgresql.org/files/documentat...ml/plpgsql.html

когда устанавливал Postgresql под винду видел галочку PL/SQL

Хотя сам на PL/SQL в PostgrSQL-е не писал.

Добавлено @ 15:45 
http://search.postgresql.org/www.search?cs...p;submit=Search
PM WWW GTalk Jabber   Вверх
J2A
Дата 31.8.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



Цитата(pythonwin @ 31.8.2006,  18:45)
Цитата(J2A @  31.8.2006,  22:08 Найти цитируемый пост)
 PL/SQL - это однозначно Oracle. 


а я думал что и другие SQL-ые СУБД могут поддерживать PL/SQL
например PostgreSQL

Может не будем уходить от основной темы? 
PL/pgSQL != PL/SQL.

P.S. Ныне модно давать ссылки на немецкую документацию?
--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
pythonwin
Дата 31.8.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(J2A @  31.8.2006,  23:05 Найти цитируемый пост)

Может не будем уходить от основной темы? 
PL/pgSQL != PL/SQL.


http://www.postgresql.org/docs/7.3/static/plpgsql.html

Цитата

Porting from Oracle PL/SQL



http://pgfoundry.org/projects/protopg


На PL/SQL не писал, но IMHO, что его может поддерживать не только Oracle, хотя я могу и ошибаться... smile

Добавлено @ 16:21 
site:www.postgresql.org "PL/SQL"
smile
PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 31.8.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41




M
Cr@$h
albertn ++ за помощь новичку и поддержку.
 
PM MAIL ICQ   Вверх
pythonwin
Дата 1.9.2006, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Cr@$h, Дык... а уже поставил... Но ничего думаю, что albertn, не растроиться. smile
PM WWW GTalk Jabber   Вверх
albertn
Дата 1.9.2006, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(pythonwin @ 1.9.2006,  07:38)
Cr@$h, Дык... а уже поставил... Но ничего думаю, что albertn, не растроиться. smile

Не обижусь smile
Спасибо

Это сообщение отредактировал(а) albertn - 1.9.2006, 08:52
PM WWW ICQ   Вверх
pythonwin
Дата 1.9.2006, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(albertn @  1.9.2006,  15:52 Найти цитируемый пост)
Спасибо

Пожалуйста!
PM WWW GTalk Jabber   Вверх
Cr@$h
Дата 1.9.2006, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 1
Всего: 41



Цитата(pythonwin @  1.9.2006,  08:38 Найти цитируемый пост)
Cr@$h, Дык... а уже поставил... Но ничего думаю, что albertn, не растроиться. 

Да, за один пост знаю люди по несколько ++ ухватывали на Винграде, и это хорошо. Каждый может ставить, а если что-то понравилось нескольким, то "несколькие" и поставят несколько smile
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0708 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.