Spec-Zone.ru › Qt 5.6

Класс QAbstractXmlReceiver

Класс QAbstractXmlReceiver предоставляет интерфейс обратного вызова для преобразования выходных данных запроса QXmlQuery. Подробнее...

Заголовок: #include <QAbstractXmlReceiver>
qmake: QT += xmlpatterns
С момента: Qt 4.4
Наследуется от:

QXmlSerializer

  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются многопоточными.

Открытые функции

QAbstractXmlReceiver()
virtual ~QAbstractXmlReceiver()
virtual void atomicValue(const QVariant &value) = 0
virtual void attribute(const QXmlName &name, const QStringRef &value) = 0
virtual void characters(const QStringRef &value) = 0
virtual void comment(const QString &value) = 0
virtual void endDocument() = 0
virtual void endElement() = 0
virtual void endOfSequence() = 0
virtual void namespaceBinding(const QXmlName &name) = 0
virtual void processingInstruction(const QXmlName &target, const QString &value) = 0
virtual void startDocument() = 0
virtual void startElement(const QXmlName &name) = 0
virtual void startOfSequence() = 0

Подробное описание

Класс QAbstractXmlReceiver предоставляет интерфейс обратного вызова для преобразования выходных данных запроса QXmlQuery.

QAbstractXmlReceiver — это абстрактный базовый класс, который предоставляет интерфейс обратного вызова для получения последовательности XQuery, обычно выходных данных QXmlQuery, и преобразования этой последовательности в структуру по вашему выбору, обычно XML. Рассмотрим пример:

QXmlQuery query;
query.setQuery("doc('index.html')/html/body/p[1]");

QXmlSerializer serializer(query, myOutputDevice);
query.evaluateTo(&serializer);

Сначала он создаёт запрос query, который получает первый абзац из документа index.html. Затем он создаёт сериализатор XML с запросом query и myOutputDevice (обратите внимание, что сериализатор является приёмником XML, т. е. подклассом QAbstractXmlReceiver). Наконец, он оценивает запрос query, создавая упорядоченную последовательность вызовов функций обратного вызова в сериализаторе. Последовательность обратных вызовов преобразует выходные данные запроса в XML и записывает его в myOutputDevice.

Хотя в примере используется QXmlQuery для создания последовательности обратных вызовов функций в QAbstractXmlReceiver, вы можете вызывать функции обратного вызова напрямую, если ваша последовательность вызовов представляет собой допустимую последовательность XQuery.

Последовательности XQuery

Последовательность XQuery — это упорядоченная коллекция нуля, одного или нескольких элементов. Каждый элемент — это либо атомное значение, либо узел. Атомное значение — это простое значение данных.

Существует шесть типов узлов.

  • Узел элемента представляет собой XML-элемент.
  • Узел атрибута представляет собой XML-атрибут.
  • Узел документа представляет собой весь XML-документ.
  • Узел текста представляет собой данные символов (содержимое элемента).
  • Узел обработки команд представляет собой инструкцию обработки XML, которая используется в XML-документе, чтобы сообщить приложению, читающему документ, выполнить какое-либо действие. Типичный пример — использование инструкции обработки для указания приложению использовать определённый XSLT-стиль для отображения документа.
  • А узел комментария представляет собой XML-комментарий.

Последовательность узлов и атомных значений подчиняется следующим правилам. Обратите внимание, что узел пространства имён относится к специальному узлу атрибута с именем xmlns.

  • Каждый узел появляется в последовательности до того, как появятся его дочерние элементы и их потомки.
  • Потомки узла появляются в последовательности до появления каких-либо его братьев.
  • Узел документа представляет собой весь документ. В последовательности могут появиться ноль или более узлов документа, но они могут быть только верхнеуровневыми элементами (т. е. узел документа не может быть потомком другого узла).
  • Узлы пространства имён следуют непосредственно за узлом элемента, с которым они связаны.
  • Узлы атрибутов следуют непосредственно за узлами пространства имён элемента, с которым они связаны, или...
  • Если после элемента нет узлов пространства имён, то узлы атрибутов следуют непосредственно за элементом.
  • Атомное значение может появиться только как верхнеуровневый элемент, т. е. оно не может появиться как дочерний элемент узла.
  • Узлы инструкций обработки не имеют дочерних элементов, и их родителем является либо узел документа, либо узел элемента.
  • Узлы комментариев не имеют дочерних элементов, и их родителем является либо узел документа, либо узел элемента.

Последовательность узлов и атомных значений отправляется в QAbstractXmlReceiver (QXmlSerializer в приведённом выше примере) в виде последовательности вызовов функций обратного вызова приёмника. Сопоставление функций обратного вызова с элементами последовательности таково.

  • startDocument() и endDocument() вызываются для каждого узла документа в последовательности. endDocument() не вызывается до тех пор, пока все дочерние элементы узла документа не появятся в последовательности.
  • startElement() и endElement() вызываются для каждого узла элемента. endElement() не вызывается до тех пор, пока все дочерние элементы узла элемента не появятся в последовательности.
  • attribute() вызывается для каждого узла атрибута.
  • comment() вызывается для каждого узла комментария.
  • characters() вызывается для каждого узла текста.
  • processingInstruction() вызывается для каждого узла инструкции обработки.
  • namespaceBinding() вызывается для каждого узла пространства имён.
  • atomicValue() вызывается для каждого атомного значения.

Полное объяснение последовательностей XQuery можно найти на странице XQuery Data Model.

См. также W3C XQuery 1.0 and XPath 2.0 Data Model (XDM), QXmlSerializer и QXmlResultItems.

Документация по функциям-членам

QAbstractXmlReceiver::QAbstractXmlReceiver()

Создаёт абстрактный приёмник XML.

[virtual] QAbstractXmlReceiver::~QAbstractXmlReceiver()

Удаляет приёмник XML.

[pure virtual] void QAbstractXmlReceiver::atomicValue(const QVariant &value)

Этот обратный вызов вызывается, когда в последовательности появляется атомное значение. value — это простое значение данных. Гарантируется, что оно действительно.

[pure virtual] void QAbstractXmlReceiver::attribute(const QXmlName &name, const QStringRef &value)

Этот обратный вызов вызывается, когда в последовательности появляется узел атрибута. name — это имя атрибута, а строка value содержит значение атрибута.

[pure virtual] void QAbstractXmlReceiver::characters(const QStringRef &value)

Этот обратный вызов вызывается при появлении узла текста в последовательности. В value содержится текст. Смежные узлы текста могут не встречаться в последовательности, то есть этот обратный вызов не должен вызываться дважды подряд.

[pure virtual] void QAbstractXmlReceiver::comment(const QString &value)

Этот обратный вызов вызывается при появлении узла комментария в последовательности. value — это текст комментария, который не должен содержать строку "--".

[pure virtual] void QAbstractXmlReceiver::endDocument()

Этот обратный вызов вызывается при появлении конца узла документа в последовательности.

[pure virtual] void QAbstractXmlReceiver::endElement()

Этот обратный вызов вызывается при появлении конца узла элемента в последовательности.

[pure virtual] void QAbstractXmlReceiver::endOfSequence()

Этот обратный вызов вызывается только один раз, сразу после завершения последовательности.

[pure virtual] void QAbstractXmlReceiver::namespaceBinding(const QXmlName &name)

Этот обратный вызов вызывается, когда привязка пространства имён находится в области действия элемента. Пространство имён определяется URI. В QXmlName name, значение QXmlName::namespaceUri() — это URI. Значение QXmlName::prefix() — это префикс, к которому привязано URI. Локальное имя несущественно и может быть произвольным значением.

[pure virtual] void QAbstractXmlReceiver::processingInstruction(const QXmlName &target, const QString &value)

Этот обратный вызов вызывается при появлении инструкции обработки в последовательности. Инструкция обработки используется в документе XML для указания приложению, читающему документ, выполнить некоторое действие. Типичный пример — использование инструкции обработки для указания приложению использовать определённый XSLT-стиль для обработки документа.

<?xml-stylesheet type="test/xsl" href="formatter.xsl"?>

target — имя инструкции обработки. Его префикс и URI пространства имён должны оба быть пустыми. Его локальное имя — целевое имя. В приведенном примере имя — xml-stylesheet.

value указывает действие, которое нужно выполнить. Обратите внимание, что value не должно содержать строку "?>". В приведенном примере value — type="test/xsl" href="formatter.xsl.

В целом, следует избегать использования инструкций обработки, поскольку они не учитывают пространства имён и во многих контекстах просто удаляются. Инструкции обработки часто можно заменить элементами из пользовательского пространства имён.

[pure virtual] void QAbstractXmlReceiver::startDocument()

Этот обратный вызов вызывается при появлении узла документа в последовательности.

[pure virtual] void QAbstractXmlReceiver::startElement(const QXmlName &name)

Этот обратный вызов вызывается при появлении нового узла элемента в последовательности. name — допустимое имя узла элемента.

[pure virtual] void QAbstractXmlReceiver::startOfSequence()

Этот обратный вызов вызывается только один раз, перед началом последовательности.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qabstractxmlreceiver.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API