Класс QXmlFormatter
Класс QXmlFormatter — это реализация класса QXmlSerializer для преобразования выходных данных XQuery в форматированный XML. Подробнее...
| Заголовок: | #include <QXmlFormatter> |
| qmake: | QT += xmlpatterns |
| С тех пор: | Qt 4.4 |
| Наследует: | QXmlSerializer |
Этот класс был представлен в Qt 4.4.
Примечание: Все функции в этом классе являются перевключительно-безопасными.
Открытые функции
| QXmlFormatter(const QXmlQuery &query, QIODevice *outputDevice) | |
| int | уровень_вдавливания() const |
| void | установить_уровень_вдавливания(int depth) |
Переопределённые открытые функции
| virtual void | atomicValue(const QVariant &value) override |
| virtual void | attribute(const QXmlName &name, const QStringRef &value) override |
| virtual void | characters(const QStringRef &value) override |
| virtual void | comment(const QString &value) override |
| virtual void | конец_документа() override |
| virtual void | конец_элемента() override |
| virtual void | конец_последовательности() override |
| virtual void | обработка_инструкции(const QXmlName &name, const QString &value) override |
| virtual void | начало_документа() override |
| virtual void | начало_элемента(const QXmlName &name) override |
| virtual void | начало_последовательности() override |
Подробное описание
QXmlFormatter — это подкласс QXmlSerializer, который форматирует выходной XML для лучшего восприятия человеком.
QXmlSerializer выводит XML без добавления ненужных пробелов. В частности, он не добавляет переводы строк и отступы. Чтобы сделать вывод XML более читаемым, QXmlFormatter добавляет переводы строк и отступы, добавляя, удаляя и изменяя узлы последовательности последовательности, состоящие только из пробелов. Также он изменяет пробелы в других местах, где они не существенны; например, между атрибутами и в прологе документа.
Например, где базовый класс QXmlSerializer выводил бы это:
<a><b/><c/><p>Some Text</p></a>
QXmlFormatter выводит это:
<a> <b/> <c/> <p>Some Text</p> </a>
Если вам нужно просто сериализовать XML в удобочитаемом формате, используйте QXmlFormatter как есть. Уровень отступа по умолчанию составляет 4 пробела, но вы можете установить свой собственный уровень отступа с помощью установить_уровень_вдавливания().
Переводы строк и отступы, добавляемые QXmlFormatter, подходят для общих форматов, таких как XHTML, SVG или Docbook, где пробелы не существенны. Однако, если ваш XML будет использоваться в качестве входных данных, где пробелы существенны, то вы должны написать свой собственный подкласс QXmlSerializer или QAbstractXmlReceiver.
Обратите внимание, что использование QXmlFormatter вместо QXmlSerializer увеличит вычислительную нагрузку и размер хранилища документа из-за вставки пробелов.
Обратите также внимание, что стиль отступа, используемый QXmlFormatter, остаётся слабо определённым и может измениться в будущих версиях Qt. Если требуется определённый стиль отступа, то либо используйте базовый класс QXmlSerializer напрямую, либо напишите свой собственный подкласс QXmlSerializer или QAbstractXmlReceiver. В качестве альтернативы вы можете создать подкласс QXmlFormatter и переопределить обратные вызовы там.
QXmlQuery query;
query.setQuery("doc('index.html')/html/body/p[1]");
QXmlFormatter formatter(query, myOutputDevice);
formatter.setIndentationDepth(2);
query.evaluateTo(&formatter); Документация по функциям-членам
QXmlFormatter::QXmlFormatter(const QXmlQuery &query, QIODevice *outputDevice)
Создаёт форматировщик, использующий пул имён и обработчик сообщений в query, и записывает результат в outputDevice в формате форматированного XML.
outputDevice передаётся напрямую конструктору QXmlSerializer.
См. также QXmlSerializer.
[override virtual] void QXmlFormatter::atomicValue(const QVariant &value)
Переопределяет: QXmlSerializer::atomicValue(const QVariant &value).
[override virtual] void QXmlFormatter::attribute(const QXmlName &name, const QStringRef &value)
Переопределяет: QXmlSerializer::attribute(const QXmlName &name, const QStringRef &value).
[override virtual] void QXmlFormatter::characters(const QStringRef &value)
Переопределяет: QXmlSerializer::characters(const QStringRef &value).
[override virtual] void QXmlFormatter::comment(const QString &value)
Переопределяет: QXmlSerializer::comment(const QString &value).
[override virtual] void QXmlFormatter::endDocument()
Переопределяет: QXmlSerializer::endDocument().
[override virtual] void QXmlFormatter::endElement()
Переопределяет: QXmlSerializer::endElement().
[override virtual] void QXmlFormatter::endOfSequence()
Переопределяет: QXmlSerializer::endOfSequence().
int QXmlFormatter::уровень_вдавливания() const
Возвращает количество пробелов, которое QXmlFormatter будет выводить для каждого уровня вдавливания. По умолчанию — четыре.
См. также установить_уровень_вдавливания().
[override virtual] void QXmlFormatter::processingInstruction(const QXmlName &name, const QString &value)
Переопределяет: QXmlSerializer::processingInstruction(const QXmlName &name, const QString &value).
void QXmlFormatter::установить_уровень_вдавливания(int depth)
Устанавливает depth в качестве количества пробелов, которое QXmlFormatter будет выводить для уровня вдавливания. По умолчанию — четыре.
См. также уровень_вдавливания().
[override virtual] void QXmlFormatter::startDocument()
Переопределяет: QXmlSerializer::startDocument().
[override virtual] void QXmlFormatter::startElement(const QXmlName &name)
Переопределяет: QXmlSerializer::startElement(const QXmlName &name).
[override virtual] void QXmlFormatter::startOfSequence()
Переопределяет: QXmlSerializer::startOfSequence().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qxmlformatter.html