Класс QAbstractXmlReceiver
Класс QAbstractXmlReceiver предоставляет интерфейс обратного вызова для преобразования выходных данных QXmlQuery. Подробнее...
| Заголовок: | #include <QAbstractXmlReceiver> |
| qmake: | QT += xmlpatterns |
| С момента: | Qt 4.4 |
| Наследуется от: |
Этот класс был представлен в Qt 4.4.
Примечание: Все функции в этом классе являются реентерабельными.
Открытые функции
| 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 — это абстрактный базовый класс, предоставляющий интерфейс обратного вызова для получения последовательности 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.15/qabstractxmlreceiver.html