Класс QAbstractXmlReceiver
Класс QAbstractXmlReceiver предоставляет интерфейс обратного вызова для преобразования выходных данных запроса QXmlQuery. Подробнее...
| Заголовок: | #include <QAbstractXmlReceiver> |
| qmake: | QT += xmlpatterns |
| С момента: | 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 предоставляет интерфейс обратного вызова для преобразования выходных данных запроса 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