Найти - Пользователи
Полная версия: [PyQt4.QtXmlPatterns] Не получаются xpath запросы.
Начало » Python для экспертов » [PyQt4.QtXmlPatterns] Не получаются xpath запросы.
1
AliasNameless
Заранее прошу прощения если не в ту тему. Вопрос хоть и по Qt, но не про GUI.

Научите делать запросы xpath!
Есть xml файл, к которому нужно провести серию запросов.
Ничего толкового сети не нашел…..
regall
Есть хорошая документация в 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
AliasNameless
Cам язык запросов я знаю. Mне пример нужен.

Я делаю так
from PyQt4 import QtXmlPatterns
query = QtXmlPatterns.QXmlQuery()      
query.setQuery("doc('form.xml')/xfdf/fields")
s = query.evaluateToString()

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

Что я делаю не так?
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.
FishHook
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 ?
regall
FishHook, человек спрашивал, как это сделать через API, который предоставляет Qt, поэтому lxml не в теме )
AliasNameless
regall, спасибо! Ушел пробовать
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB