Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 27, 2012 13:32:57

AliasNameless
От:
Зарегистрирован: 2010-09-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

[PyQt4.QtXmlPatterns] Не получаются xpath запросы.

Заранее прошу прощения если не в ту тему. Вопрос хоть и по Qt, но не про GUI.

Научите делать запросы xpath!
Есть xml файл, к которому нужно провести серию запросов.
Ничего толкового сети не нашел…..



Офлайн

#2 Апрель 27, 2012 13:44:49

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

[PyQt4.QtXmlPatterns] Не получаются xpath запросы.

Есть хорошая документация в PySide: http://www.pyside.org/docs/pyside-1.0.6/PySide/QtXmlPatterns/QXmlQuery.html

А по самому XPath'y, чтобы не читать спецификацию, есть хорошие примеры на msdn: http://msdn.microsoft.com/en-us/library/ms256086.aspx



Офлайн

#3 Апрель 27, 2012 13:53:41

AliasNameless
От:
Зарегистрирован: 2010-09-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

[PyQt4.QtXmlPatterns] Не получаются xpath запросы.

Cам язык запросов я знаю. Mне пример нужен.

Я делаю так

from PyQt4 import QtXmlPatterns
query = QtXmlPatterns.QXmlQuery()      
query.setQuery("doc('form.xml')/xfdf/fields")
s = query.evaluateToString()

В строке s один символ \r
Пробовал разные варианты запроса, результат один и тот же - \r

Что я делаю не так?



Офлайн

#4 Апрель 27, 2012 14:12:00

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

[PyQt4.QtXmlPatterns] Не получаются xpath запросы.

AliasNameless
Что я делаю не так?
Вот пример рабочего кода:
>>> from PySide.QtGui import QApllication
>>> from PySide.QtXmlPatterns import QXmlQuery
>>> from PySide.QtCore import QFile, QIODevice

>>> app = QApplication([])
>>> query = QXmlQuery()
>>> query.setQuery("doc('/home/krolik/cd.xml')/CATALOG/CD[1]")
>>> query.isValid()
True
>>> buffer = QFile('/home/krolik/res.xml')
>>> buffer.open(QIODevice.ReadWrite)
>>> query.evaluateTo(buffer)

В файле - нужное поддерево.
Возможно, проблема с кодировками, у меня тестовый файл - чистый латин, но я не уверен.

P.S.
Тестовая XML-ка: http://www.w3schools.com/xml/cd_catalog.xml
Версия PySide - 1.1.1
В PySide.QtXmlPatterns.QXmlQuery - нет метода evaluateToString, так что лил ответ в buffer.



Офлайн

#5 Апрель 27, 2012 14:27:15

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

[PyQt4.QtXmlPatterns] Не получаются xpath запросы.

regall
AliasNameless
Что я делаю не так?
Вот пример рабочего кода:
>>> from PySide.QtGui import QApllication
>>> from PySide.QtXmlPatterns import QXmlQuery
>>> from PySide.QtCore import QFile, QIODevice

>>> app = QApplication([])
>>> query = QXmlQuery()
>>> query.setQuery("doc('/home/krolik/cd.xml')/CATALOG/CD[1]")
>>> query.isValid()
True
>>> buffer = QFile('/home/krolik/res.xml')
>>> buffer.open(QIODevice.ReadWrite)
>>> query.evaluateTo(buffer)

В файле - нужное поддерево.
Возможно, проблема с кодировками, у меня тестовый файл - чистый латин, но я не уверен.

P.S.
Тестовая XML-ка: http://www.w3schools.com/xml/cd_catalog.xml
Версия PySide - 1.1.1
В PySide.QtXmlPatterns.QXmlQuery - нет метода evaluateToString, так что лил ответ в buffer.
Ребята, а в чем преимущество перед lxml.etree ?



Офлайн

#6 Апрель 27, 2012 14:38:41

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

[PyQt4.QtXmlPatterns] Не получаются xpath запросы.

FishHook, человек спрашивал, как это сделать через API, который предоставляет Qt, поэтому lxml не в теме )



Офлайн

#7 Апрель 27, 2012 15:08:43

AliasNameless
От:
Зарегистрирован: 2010-09-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

[PyQt4.QtXmlPatterns] Не получаются xpath запросы.

regall, спасибо! Ушел пробовать



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version