Класс 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 и 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.14/qabstractxmlreceiver.html