Доброго времени суток.
с Qt я еще не дружу а только знакомлюсь. Так что натыкаюсь на вроди как банальные вещи.
В основном проблему решить удается самостоятельно полистав форумы/книги. А тут не выходит.
Помогите люди добрые, мы сами не местные (с)
Суть вот в чем. Задача прочитать из файла XML данные с неограниченным уровнем вложений
и записать это все в QStandardItemModel после чего отобразить это хозяйство в виде QTreeView.
Перебирать все узлы QDomDocument с горем пополам удается. Дальше надо получить
текст элемента и занести его в модель. Проблема в том, что, к примеру:
Элемент "ааа"
Подэлемент "ббб"
Так вот. Текст элемента оно мне возвращает как "аааббб"....
Ниже структура тестового XML и две функции в которых реализовано чтение.
Рекурсивная часть
void MMenu::oneWay2(QStandardItem* pParent, QDomNode* pParentNode)
{
pitem = pParent;
for (int ind = 0; ind < pParentNode->childNodes().count(); ind++)
{
if (pParentNode->childNodes().item(ind).isElement())
{
pitem->appendRow(new QStandardItem);
pitem->child(ind-1,0)->setText(pParentNode->childNodes().item(ind).toElement().text());
if (pParentNode->childNodes().item(ind).childNodes().count()>1)
{
oneWay2(pitem->child(ind-1,0), &pParentNode->childNodes().item(ind));
}
}
}
}
Начало заполнения модели
void MMenu::xmlToModel(QStandardItemModel* pModel, QString appPath)
{
QDomDocument* pdomDoc;
QFile file(appPath+"/bePhoneBook.xml");
pdomDoc = new QDomDocument("bePhoneBook");
if (file.exists())
{
file.open(QIODevice::ReadOnly);
pdomDoc->setContent(&file);
file.close();
}
QDomNode n = pdomDoc->firstChild();
QModelIndex index;
n = n.firstChild();
pModel->clear();
while (!n.isNull())
{
pModel->appendRow(new QStandardItem);
index = pModel->index(pModel->rowCount()-1, 0);
pModel->setData(index, ""+n.toElement().text());
if ((n.hasChildNodes()) && (n.childNodes().count()>1))
{
oneWay2(pModel->itemFromIndex(index), &n);
}
n = n.nextSibling();
}
ptreeView->selectionModel()->setCurrentIndex(pModel->index(0, 0), QItemSelectionModel::ClearAndSelect);
delete pdomDoc;
}
Сам XML
<!DOCTYPE bePhoneBook>
<bePhoneBook>
<name>a<info>11<info>111</info>
<info>112<info>1121</info>
</info>
</info>
<info>12<info>121</info>
</info>
</name>
<name>135</name>
<name>728</name>
<name>811</name>
<name>Windows-1251</name>
<name>C:/Users/BeSeech/alex/Wall Paper</name>
</bePhoneBook>
В итоге первый элемент выходит с текстом "a11111112112112121" вместо "а".
Что я делаю не так?
Спасбио за помощь