LINUX.ORG.RU

QDomDocument внесение изменений в XML Документ.

 , ,


0

1

Есть XML примерно такого содержания:

<mod type="1">
   <el type="p" at="5" bt="6" />
   <el type="D" at="5" bt="6" />
</mod>
<mod type="2">
   <el type="p" at="4" bt="3" />
   <el type="D" at="4" bt="6" />
</mod>
Считываю его в QDomDocument. __Нужно поменять значения атрибутов at и bt у элементов с типом D и записать обратно в файл._

Что то по документации Qt не могу понять, как это сделать не создавая новый QDomDocument и пихая туда по очереди все элементы старого с нужными изменениями,

Подскажите как это сделать?

QDomElement::setAttribute() ?

UVV ★★★★★ ()
Ответ на: комментарий от UVV

QDomElement::setAttribute() ?

Это понятно, но как мне этот QDomElement запихнуть обратно QDomDocument для последующей записи в файл?

 QDomDocument doc;
    if(doc.setContent(conf) != true)
    {
        qDebug() << "error parsing XML";    
    }

    QDomElement docElem = doc.documentElement();
    QDomElement element = docElem.firstChildElement("mod");
    
    while(!element.isNull())
    {
        QDomElement chElement = element.firstChildElement("el");

        while(!chElement.isNull())
        {

            if (chElement.attribute("type") == "D")
            {
                chElement.setAttribute("at", "777"); //установили новое значение атрибута.
            }

            chElement = chElement.nextSiblingElement("channel");
        }
        element = element.nextSiblingElement("mvv");
    }

Вот я не пойму как дальше его применить к doc(QDomDocument)?

golodranez ★★★★ ()
Ответ на: комментарий от golodranez

LMGIFY

QFile file("simple.xml");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
   qDebug( "Failed to open file for writing." );
   return -1;
}
QTextStream stream(&file);
stream << doc.toString();
file.close();

UVV ★★★★★ ()
Ответ на: комментарий от UVV

Странно... QDomElement::_first|next_Element(«tag») возврящает же обект, а не ссылку и не указатель. Как данные изменённые в объекте елемента могут повлиять на объект документа?.. Или мне пить меньше надо...

golodranez ★★★★ ()
Ответ на: комментарий от golodranez

Он возвращает RC объект. Там внутри указатель на данные.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Он возвращает RC объект. Там внутри указатель на данные.

Спасибо. Уже допёр) Точно надо бросать пить, чего вчера не понял этого.

golodranez ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.