06 treeWidget->setHeaderLabels(labels);
07 treeWidget->setWindowTitle(QObject::tr("DOM Parser"));
08 treeWidget->show();
09 QFile file(fileName);
10 DomParser(&file, treeWidget);
11 }
Мы начинаем с настройки
Как и в предыдущем примере, для сборки приложения с библиотекой
QT += xml
Как показывает наш пример, проход по дереву DOM может быть достаточно непростым делом. Простая операция по извлечению текста между тегами
Запись документов XML
Существует два основных подхода к формированию файлов XML в приложениях Qt:
• мы можем построить дерево DOM и вызвать для него функцию
• мы можем сформировать файл XML вручную.
Выбор между этими подходами часто не зависит от типа используемого нами интерфейса для чтения документов XML: SAX или DOM.
Ниже приводится фрагмент программного кода, который иллюстрирует способ создания дерева DOM и его записи при помощи
const int Indent = 4;
QDomDocument doc;
QDomElement root = doc.createElement("doc");
QDomElement quote = doc.createElement("quote");
QDomElement translation = doc.createElement("translation");
QDomText latin = doc.createTextNode("Ars longa vita brevis");
QDomText english = doc.createTextNode("Art is long, life is short");
doc.appendChild(root);
root.appendChild(quote);
root.appendChild(translation);
quote.appendChild(latin);
translation.appendChild(english);
QTextStream out(&file);
doc.save(out, Indent);
Второй аргумент функции
....
Ars longa vita brevis
....
Порядок действий будет другим, если в приложении дерево DOM используется в качестве главной структуры данных. В таких случаях приложения обычно считывают документы XML, применяя интерфейс DOM, затем модифицируют в памяти дерево DOM и, наконец, вызывают функцию
По умолчанию функция
в начало дерева DOM. Следующий фрагмент программного кода показывает, как это делать:
QTextStream out(&file);
QDomNode xmlNode = doc.createProcessingInstruction("xml",
"version=\"1.0\" encoding=\"ISO-8859-1\"");
doc.insertBefore(xmlNode, doc.firstChild());
doc.save(out, Indent);
Формирование файлов XML вручную выполняется не намного сложнее, чем при помощи DOM. Мы можем использовать
QTextStream out(&file);
out.setCodec("UTF-8");
out << "
<< "
" << Qt::escape(quoteText) << "
\n"
<< "
<< "\n";