У меня в памяти есть QDomDocument. Его нужно сохранить на диск. Перед сохранением надо атрибуты некоторых элементов изменить (расшифровать). Элементы вложены, необходима рекурсия. DOM-элементы должны меняться (менять свои атрибуты) внутри рекурсии.
Примерный код такой:
void KnowTreeModel::saveDecryptDoc(QDomDocument &doc)
{
decrypt(doc);
// Запись DOM данных в файл
QFile wfile("file.xml");
QTextStream out(&wfile);
out.setCodec("UTF-8");
out << doc.toString();
}
void KnowTreeModel::decrypt(QDomDocument &doc)
{
QDomElement contentElement=doc.documentElement().firstChildElement("content").firstChildElement("node");
decryptRecurse(contentElement);
return;
}
void KnowTreeModel::decryptRecurse(QDomElement &element)
{
// Расшифровка атрибутов
element.setAttribute("cryptData", decryptMyData(element.attribute("cryptData") ));
// Рекурсивный вызов дочерних элементов
QDomNodeList childList=element.childNodes();
for(int i=0; i<childList.count(); i++) // для QDomNodeList цикл foreach не работает
if(childList.at(i).isElement())
decryptRecurse(childList.at(i).toElement()); // <!-- Что тут надо написать ???
}
Проблема в том, что рекурсивная функция должна работать через QDomElement (долго объяснять почему, проект большой). А я не могу понять, как у QDomElement получить дочерние QDomElement.
У QDomElement есть только возможность получить QDomNodeList, но тип у полученных элементов - QDomNode.
А у этого QDomNode невозможно получить указатель на QDomElement, можно только получить новый QDomElement через метод toElement().
(Блин, вообще-то мне нужна ссылка на QDomElement, но я уже сломал мосг).
В общем, вопрос в следующем: как у QDomElement перебрать дочерние QDomElement и что-нибудь в них изменить?