Spec-Zone.ru › Qt 5.14

Класс QDomDocument

Класс QDomDocument представляет XML-документ. Подробнее...

Заголовок: #include <QDomDocument>
qmake: QT += xml
Наследует: QDomNode
  • Список всех членов, включая унаследованные

Примечание: Все функции в этом классе являются реентерабельными.

Открытые функции

QDomDocument(const QDomDocument &x)
QDomDocument(const QDomDocumentType &doctype)
QDomDocument(const QString &name)
QDomDocument()
QDomDocument & operator=(const QDomDocument &x)
~QDomDocument()
QDomAttr createAttribute(const QString &name)
QDomAttr createAttributeNS(const QString &nsURI, const QString &qName)
QDomCDATASection createCDATASection(const QString &value)
QDomComment createComment(const QString &value)
QDomDocumentFragment createDocumentFragment()
QDomElement createElement(const QString &tagName)
QDomElement createElementNS(const QString &nsURI, const QString &qName)
QDomEntityReference createEntityReference(const QString &name)
QDomProcessingInstruction createProcessingInstruction(const QString &target, const QString &data)
QDomText createTextNode(const QString &value)
QDomDocumentType doctype() const
QDomElement documentElement() const
QDomElement elementById(const QString &elementId)
QDomNodeList elementsByTagName(const QString &tagname) const
QDomNodeList elementsByTagNameNS(const QString &nsURI, const QString &localName)
QDomImplementation implementation() const
QDomNode importNode(const QDomNode &importedNode, bool deep)
QDomNode::NodeType nodeType() const
bool setContent(const QByteArray &data, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr)
QByteArray toByteArray(int indent = 1) const
QString toString(int indent = 1) const

Подробное описание

Класс QDomDocument представляет собой весь XML-документ. Понятийно, он является корнем дерева документа и предоставляет основной доступ к данным документа.

Поскольку элементы, текстовые узлы, комментарии, инструкции обработки и т. д. не могут существовать вне контекста документа, класс документа также содержит фабричные функции, необходимые для создания этих объектов. Объекты узлов, созданные с помощью этих функций, имеют функцию ownerDocument(), которая связывает их с документом, в контексте которого они были созданы. Классы DOM, которые будут чаще всего использоваться, это QDomNode, QDomDocument, QDomElement и QDomText.

Парсируемый XML представлен внутренне деревом объектов, к которым можно получить доступ с помощью различных классов QDom. Все классы QDom только ссылаются на объекты во внутреннем дереве. Внутренние объекты в дереве DOM будут удалены, как только будет удален последний объект QDom, ссылающийся на них, или сам QDomDocument.

Создание элементов, текстовых узлов и т. д. выполняется с помощью различных фабричных функций, предоставляемых в этом классе. Использование конструкторов по умолчанию классов QDom приведет только к пустым объектам, которые нельзя изменить или вставить в документ.

Класс QDomDocument имеет несколько функций для создания данных документа, например, createElement(), createTextNode(), createComment(), createCDATASection(), createProcessingInstruction(), createAttribute() и createEntityReference(). Некоторые из этих функций имеют версии, которые поддерживают пространства имен, т. е. createElementNS() и createAttributeNS(). Функция createDocumentFragment() используется для хранения частей документа; это полезно для работы с сложными документами.

Весь контент документа устанавливается с помощью setContent(). Эта функция анализирует переданную строку как XML-документ и создает дерево DOM, представляющее документ. Корневой элемент доступен с помощью documentElement(). Текстовое представление документа можно получить с помощью toString().

Примечание: Дерево DOM может зарезервировать много памяти, если XML-документ большой. Для таких документов класса QXmlStreamReader или QXmlQuery могут быть лучшими решениями.

Можно вставить узел из другого документа в документ, используя importNode().

Можно получить список всех элементов с определённым тегом с помощью elementsByTagName() или elementsByTagNameNS().

Классы QDom обычно используются следующим образом:

QDomDocument doc("mydocument");
QFile file("mydocument.xml");
if (!file.open(QIODevice::ReadOnly))
    return;
if (!doc.setContent(&file)) {
    file.close();
    return;
}
file.close();

// print out the element names of all elements that are direct children
// of the outermost element.
QDomElement docElem = doc.documentElement();

QDomNode n = docElem.firstChild();
while(!n.isNull()) {
    QDomElement e = n.toElement(); // try to convert the node to an element.
    if(!e.isNull()) {
        cout << qPrintable(e.tagName()) << Qt::endl; // the node really is an element.
    }
    n = n.nextSibling();
}

// Here we append a new element to the end of the document
QDomElement elem = doc.createElement("img");
elem.setAttribute("src", "myimage.png");
docElem.appendChild(elem);

После того, как doc и elem выйдут из области видимости, всё внутреннее дерево, представляющее XML-документ, удаляется.

Для создания документа с помощью DOM используйте код, подобный этому:

QDomDocument doc("MyML");
QDomElement root = doc.createElement("MyML");
doc.appendChild(root);

QDomElement tag = doc.createElement("Greeting");
root.appendChild(tag);

QDomText t = doc.createTextNode("Hello World");
tag.appendChild(t);

QString xml = doc.toString();

Для получения дополнительной информации об объектной модели документа (Document Object Model) см. спецификации Document Object Model (DOM) уровень 1 и уровень 2 Core.

См. также Пример DOM закладок и Пример простой модели DOM.

Документация по членам-функциям

QDomDocument::QDomDocument(const QDomDocument &x)

Создаёт копию x.

Данные копии совместно используются (неглубокая копия): изменение одного узла также изменит другой. Если вам нужна глубокая копия, используйте cloneNode().

QDomDocument::QDomDocument(const QDomDocumentType &doctype)

Создаёт документ с типом документа doctype.

См. также QDomImplementation::createDocumentType().

QDomDocument::QDomDocument(const QString &name)

Создаёт документ и задаёт имя типа документа на name.

QDomDocument::QDomDocument()

Создаёт пустой документ.

QDomDocument &QDomDocument::operator=(const QDomDocument &x)

Присваивает x этому документу DOM.

Данные копии совместно используются (неглубокая копия): изменение одного узла также изменит другой. Если вам нужна глубокая копия, используйте cloneNode().

QDomDocument::~QDomDocument()

Уничтожает объект и освобождает его ресурсы.

QDomAttr QDomDocument::createAttribute(const QString &name)

Создаёт новый атрибут с именем name, который можно вставить в элемент, например, с помощью QDomElement::setAttributeNode().

Если name не является допустимым именем XML, поведение этой функции определяется QDomImplementation::InvalidDataPolicy.

См. также createAttributeNS().

QDomAttr QDomDocument::createAttributeNS(const QString &nsURI, const QString &qName)

Создаёт новый атрибут с поддержкой пространств имён, который можно вставить в элемент. Имя атрибута — qName, а URI пространства имён — nsURI. Эта функция также устанавливает QDomNode::prefix() и QDomNode::localName() на соответствующие значения (в зависимости от qName).

Если qName не является допустимым именем XML, поведение этой функции определяется QDomImplementation::InvalidDataPolicy.

См. также createAttribute().

QDomCDATASection QDomDocument::createCDATASection(const QString &value)

Создаёт новый раздел CDATA для строки value, который можно вставить в документ, например, с помощью QDomNode::appendChild().

Если value содержит символы, которые нельзя хранить в разделе CDATA, поведение этой функции определяется QDomImplementation::InvalidDataPolicy.

См. также QDomNode::appendChild(), QDomNode::insertBefore() и QDomNode::insertAfter().

QDomComment QDomDocument::createComment(const QString &value)

Создаёт новый комментарий для строки value, который можно вставить в документ, например, с помощью QDomNode::appendChild().

Если value содержит символы, которые нельзя хранить в XML-комментарии, поведение этой функции определяется QDomImplementation::InvalidDataPolicy.

См. также QDomNode::appendChild(), QDomNode::insertBefore() и QDomNode::insertAfter().

QDomDocumentFragment QDomDocument::createDocumentFragment()

Создаёт новый фрагмент документа, который можно использовать для хранения частей документа, например, при выполнении сложных манипуляций с деревом документа.

QDomElement QDomDocument::createElement(const QString &tagName)

Создаёт новый элемент с именем tagName, который можно вставить в дерево DOM, например, с помощью QDomNode::appendChild().

Если tagName не является допустимым именем XML, поведение этой функции определяется QDomImplementation::InvalidDataPolicy.

См. также createElementNS(), QDomNode::appendChild(), QDomNode::insertBefore() и QDomNode::insertAfter().

QDomElement QDomDocument::createElementNS(const QString &nsURI, const QString &qName)

Создаёт новый элемент с поддержкой пространств имён, который можно вставить в дерево DOM. Имя элемента — qName, а URI пространства имён — nsURI. Эта функция также устанавливает QDomNode::prefix() и QDomNode::localName() на соответствующие значения (в зависимости от qName).

Если qName пустая строка, возвращает нулевой элемент независимо от того, установлен ли политику обработки недопустимых данных.

См. также createElement().

QDomEntityReference QDomDocument::createEntityReference(const QString &name)

Создаёт новую ссылку на сущность с именем name, которую можно вставить в документ, например, с помощью QDomNode::appendChild().

Если name не является допустимым именем XML, поведение этой функции определяется QDomImplementation::InvalidDataPolicy.

См. также QDomNode::appendChild(), QDomNode::insertBefore() и QDomNode::insertAfter().

QDomProcessingInstruction QDomDocument::createProcessingInstruction(const QString &target, const QString &data)

Создаёт новую инструкцию обработки, которую можно вставить в документ, например, с помощью QDomNode::appendChild(). Эта функция устанавливает целевой параметр для инструкции обработки на target и данные на data.

Если target не является допустимым именем XML или data содержит символы, которые не могут быть в инструкции обработки, поведение этой функции определяется QDomImplementation::InvalidDataPolicy.

См. также QDomNode::appendChild(), QDomNode::insertBefore() и QDomNode::insertAfter().

QDomText QDomDocument::createTextNode(const QString &value)

Создаёт текстовый узел для строки value, который можно вставить в дерево документа, например, с помощью QDomNode::appendChild().

Если value содержит символы, которые нельзя хранить в виде текстовых данных XML-документа (даже в виде символьных ссылок), поведение этой функции определяется QDomImplementation::InvalidDataPolicy.

См. также QDomNode::appendChild(), QDomNode::insertBefore() и QDomNode::insertAfter().

QDomDocumentType QDomDocument::doctype() const

Возвращает тип документа этого документа.

QDomElement QDomDocument::documentElement() const

Возвращает корневой элемент документа.

QDomElement QDomDocument::elementById(const QString &elementId)

Возвращает элемент, идентификатор которого равен elementId. Если элемент с заданным идентификатором не найден, эта функция возвращает нулевой элемент.

Так как классы QDom не знают, какие атрибуты являются идентификаторами элементов, эта функция всегда возвращает нулевой элемент. Это может измениться в будущей версии.

QDomNodeList QDomDocument::elementsByTagName(const QString &tagname) const

Возвращает QDomNodeList, содержащий все элементы в документе с именем tagname. Порядок в списке узлов соответствует порядку их встречи в обходе дерева элементов в порядке прямой обхода.

См. также elementsByTagNameNS() и QDomElement::elementsByTagName().

QDomNodeList QDomDocument::elementsByTagNameNS(const QString &nsURI, const QString &localName)

Возвращает QDomNodeList, содержащий все элементы в документе с локальным именем localName и URI пространства имен nsURI. Порядок в списке узлов соответствует порядку их встречи в обходе дерева элементов в порядке прямой обхода.

См. также elementsByTagName() и QDomElement::elementsByTagNameNS().

QDomImplementation QDomDocument::implementation() const

Возвращает объект QDomImplementation.

QDomNode QDomDocument::importNode(const QDomNode &importedNode, bool deep)

Импортирует узел importedNode из другого документа в этот документ. importedNode остаётся в исходном документе; эта функция создаёт копию, которая может использоваться в этом документе.

Эта функция возвращает импортированный узел, принадлежащий этому документу. Возвращённый узел не имеет родителя. Невозможно импортировать узлы QDomDocument и QDomDocumentType. В этих случаях функция возвращает нулевой узел.

Если importedNode является нулевым узлом, возвращается нулевой узел.

Если deep равно true, функция импортирует не только узел importedNode, но и всё его поддерево; если false, то только сам importedNode. Аргумент deep не влияет на узлы QDomAttr и QDomEntityReference, так как потомки узлов QDomAttr всегда импортируются, а потомки узлов QDomEntityReference никогда не импортируются.

Поведение этой функции немного отличается в зависимости от типов узлов:

Тип узла Поведение
QDomAttr Владеющий элемент устанавливается в 0, и в сгенерированном атрибуте устанавливается флаг, указанный в параметре. Всё поддерево importedNode всегда импортируется для узлов атрибутов: deep не оказывает влияния.
QDomDocument Узлы типа документа импортировать нельзя.
QDomDocumentFragment Если deep равно true, функция импортирует весь фрагмент документа; в противном случае она генерирует только пустой фрагмент документа.
QDomDocumentType Узлы типа документа импортировать нельзя.
QDomElement Атрибуты, для которых QDomAttr::specified() равно true, также импортируются, другие атрибуты не импортируются. Если deep равно true, функция также импортирует поддерево importedNode; в противном случае импортируется только узел элемента (и некоторые атрибуты, см. выше).
QDomEntity Узлы сущности можно импортировать, но в данный момент нет способа их использовать, так как тип документа в DOM level 2 является только для чтения.
QDomEntityReference Потомки узлов ссылок на сущности никогда не импортируются: deep не оказывает влияния.
QDomNotation Узлы обозначений можно импортировать, но в данный момент нет способа их использовать, так как тип документа в DOM level 2 является только для чтения.
QDomProcessingInstruction Целевое значение и значение инструкции обработки копируются в новый узел.
QDomText Текст копируется в новый узел.
QDomCDATASection Текст копируется в новый узел.
QDomComment Текст копируется в новый узел.

См. также QDomElement::setAttribute(), QDomNode::insertBefore(), QDomNode::insertAfter(), QDomNode::replaceChild(), QDomNode::removeChild(), и QDomNode::appendChild().

QDomNode::NodeType QDomDocument::nodeType() const

Возвращает DocumentNode.

bool QDomDocument::setContent(const QByteArray &data, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr)

Эта функция парсит XML-документ из массива байтов data и устанавливает его как содержимое документа. Она пытается определить кодировку документа, как требуется спецификацией XML.

Если namespaceProcessing равно true, парсер распознаёт пространства имён в XML-файле и устанавливает имя префикса, локальное имя и URI пространства имён в соответствующие значения. Если namespaceProcessing равно false, парсер не выполняет обработку пространств имён при чтении XML-файла.

Если возникает ошибка разбора, эта функция возвращает false и сообщение об ошибке помещается в *errorMsg, номер строки в *errorLine, а номер столбца в *errorColumn (если соответствующий указатель не равен 0); в противном случае эта функция возвращает true. Различные сообщения об ошибках описаны в документации класса QXmlParseException. Обратите внимание, что, если вы хотите отобразить эти сообщения об ошибках пользователям вашего приложения, они будут отображаться на английском языке, если они не переведены явно.

Если namespaceProcessing равно true, функция QDomNode::prefix() возвращает строку для всех элементов и атрибутов. Возвращает пустую строку, если у элемента или атрибута нет префикса.

Узлы текста, состоящие только из пробелов, удаляются и не появятся в QDomDocument. Если это поведение нежелательно, можно использовать перегрузку setContent(), которая позволяет указать QXmlReader.

Если namespaceProcessing равно false, функции QDomNode::prefix(), QDomNode::localName() и QDomNode::namespaceURI() возвращают пустую строку.

Обработка ссылок на сущности выполняется следующим образом:

  • Ссылки на внутренние общие сущности и символьные сущности, встречающиеся в содержимом, включаются. Результатом является узел QDomText со ссылками, заменёнными соответствующими значениями сущностей.
  • Ссылки на параметрические сущности, встречающиеся во внутренней части, включаются. Результатом является узел QDomDocumentType, который содержит объявления сущностей и обозначений со ссылками, заменёнными соответствующими значениями сущностей.
  • Любая общая анализируемая ссылка на сущность, которая не определена во внутренней части и встречается в содержимом, представляется как узел QDomEntityReference.
  • Любая анализируемая ссылка на сущность, которая не определена во внутренней части и встречается вне содержимого, заменяется пустой строкой.
  • Любая необработанная ссылка на сущность заменяется пустой строкой.

См. также QDomNode::namespaceURI(), QDomNode::localName(), QDomNode::prefix(), QString::isNull() и QString::isEmpty().

bool QDomDocument::setContent(const QString &text, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr)

Это перегруженная функция.

Эта функция считывает XML-документ из строки text, возвращая true, если содержимое было успешно обработано; в противном случае возвращает false. Так как text уже является строкой Юникода, определение кодировки не выполняется.

bool QDomDocument::setContent(QIODevice *dev, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr)

Это перегруженная функция.

Эта функция считывает XML-документ из устройства ввода-вывода dev, возвращая true, если содержимое было успешно распарсено; в противном случае возвращает false.

bool QDomDocument::setContent(QXmlInputSource *source, bool namespaceProcessing, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr)

Это перегруженная функция.

Эта функция считывает XML-документ из QXmlInputSource source, возвращая true, если содержимое было успешно распарсено; в противном случае возвращает false.

Эта функция была добавлена в Qt 4.5.

bool QDomDocument::setContent(const QByteArray &buffer, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr)

Это перегруженная функция.

Эта функция считывает XML-документ из массива байтов buffer, возвращая true, если содержимое было успешно распарсено; в противном случае возвращает false.

Обработка пространств имён не выполняется.

bool QDomDocument::setContent(const QString &text, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr)

Это перегруженная функция.

Эта функция считывает XML-документ из строки text, возвращая true, если содержимое было успешно распарсено; в противном случае возвращает false. Так как text уже является строкой Юникод, определение кодировки не выполняется.

Обработка пространств имён также не выполняется.

bool QDomDocument::setContent(QIODevice *dev, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr)

Это перегруженная функция.

Эта функция считывает XML-документ из устройства ввода-вывода dev, возвращая true, если содержимое было успешно распарсено; в противном случае возвращает false.

Обработка пространств имён не выполняется.

bool QDomDocument::setContent(QXmlInputSource *source, QXmlReader *reader, QString *errorMsg = nullptr, int *errorLine = nullptr, int *errorColumn = nullptr)

Это перегруженная функция.

Эта функция считывает XML-документ из QXmlInputSource source и парсит его с помощью QXmlReader reader, возвращая true, если содержимое было успешно распарсено; в противном случае возвращает false.

Эта функция не изменяет параметры reader. Если вы хотите использовать определённые параметры для парсинга, вы можете использовать эту функцию для соответствующей настройки ридера.

См. такжеQXmlSimpleReader.

QByteArray QDomDocument::toByteArray(int indent = 1) const

Преобразует распарсенный документ обратно в текстовое представление и возвращает QByteArray, содержащий данные, закодированные в UTF-8.

Эта функция использует indent как величину отступа для вложенных элементов.

См. такжеtoString().

QString QDomDocument::toString(int indent = 1) const

Преобразует распарсенный документ обратно в текстовое представление.

Эта функция использует indent как величину отступа для вложенных элементов.

Если indent равно -1, пробелы не добавляются.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qdomdocument.html

Spec-Zone.ru

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