Мы определяем класс с названием
01 DomParser::DomParser(QIODevice *device, QTreeWidget *tree)
02 {
03 treeWidget = tree;
04 QString errorStr;
05 int errorLine;
06 int errorColumn;
07 QDomDocument doc;
08 if (!doc.setContent(device, true, &errorStr,
09 &errorLine, &errorColumn)) {
10 QMessageBox::warning(0, QObject::tr("DOM Parser"),
11 QObject::tr("Parse error at line %1, column %2:\n%3")
12 .arg(errorLine).arg(errorColumn).arg(errorStr));
13 return;
14 }
15 QDomElement root = doc.documentElement;
16 if (root.tagName != "bookindex")
17 return;
18 QDomNode node = root.firstChild;
19 while (!node.isNull) {
20 if (node.toElement.tagName == "entry")
21 parseEntry(node.toElement, 0);
22 node = node.nextSibling;
23 }
24 }
В конструкторе мы создаем объект
Класс
01 void DomParser::parseEntry(const QDomElement &element,
02 QTreeWidgetItem *parent)
03 {
04 QTreeWidgetItem *item;
05 if (parent) {
06 item = new QTreeWidgetTtem(parent);
07 } else {
08 item = new QTreeWidgetItem(treeWidget);
09 }
10 item->setText(0, element.attribute("term"));
11 QDomNode node = element.firstChild;
12 while (!node.isNull) {
13 if (node.toElement.tagName == "entry") {
14 parseEntry(node.toElement, item);
15 } else if (node.toElement.tagName == "page") {
16 QDomNode childNode = node.firstChild;
17 while (!childNode.isNull) {
18 if (childNode.nodeType == QDomNode::TextNode) {
19 QString page = childNode.toText.data;
20 QString allPages = item->text(1);
21 if (!allPages.isEmpty)
22 allPages += ", ";