Spec-Zone.ru › Qt 5.9

Класс 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);

Сначала он создает запрос, который получает первый абзац из документа index.html. Затем он создает сериализатор XML с запросом и myOutputDevice (Обратите внимание, что сериализатор является приемником XML, то есть подклассом QAbstractXmlReceiver). Наконец, он оценивает запрос, генерируя упорядоченную последовательность вызовов функций обратного вызова сериализатора. Последовательность обратных вызовов преобразует выходные данные запроса в 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/qt-5.9/qabstractxmlreceiver.html

Spec-Zone.ru

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