Russian Qt Forum

Qt => XML => Тема начата: a1ien от Июнь 08, 2011, 16:41



Название: Изменить значение в XML
Отправлено: a1ien от Июнь 08, 2011, 16:41
Есть XML допустим такой.
<settings>
 <someVal value="test"/>
 <Value>Test</value>
</settings>
Как изменить значение между Value.
как изменить в someVal атрибут я нашел.
там просто element.firstChildElement("someVal").setAttribute("value","test2");
а вот как изменить там текст. Пробовал так.
element.firstChildElement("Value").setNodeValue("Text2");
Но что но не заработало.


Название: Re: Изменить значение в XML
Отправлено: twp от Июнь 09, 2011, 18:53
Test в данном случае это QDomText и соответственно нужно использовать его метод setData ( const QString & v )


Название: Re: Изменить значение в XML
Отправлено: a1ien от Июнь 09, 2011, 20:32
Пробовал. Не работает.
зарабтало только вот так.
Код
C++ (Qt)
setText(const QDomElement &element, const QString &text)
{
       QDomElement oldElement=element;
        if (!element.isNull()) {
               QDomElement newTitleElement = domDocument.createElement(element.tagName());
 
               QDomText newTitleText = domDocument.createTextNode(text);
               newTitleElement.appendChild(newTitleText);
 
               oldElement.parentNode().replaceChild(newTitleElement, oldElement);
       }
}
 


Название: Re: Изменить значение в XML
Отправлено: twp от Июнь 09, 2011, 21:39
а можно код, который не работает? перед тем как делать QDomNode::toText () выполнялось условие QDomNode::isText ()?


Название: Re: Изменить значение в XML
Отправлено: a1ien от Июнь 09, 2011, 22:26
Я проверял через nodeType ().
Дак вот там был QDomNode::ElementNode.
Хотя я на 100% уверен что это именно тот элемент который нужн. Так-как вызов text () возвращает правильный текст.


Название: Re: Изменить значение в XML
Отправлено: twp от Июнь 09, 2011, 22:48
а если попробовать взять у этого элемента чайлда через QDomNode QDomNode::firstChild () и проверить уже его тип?


Название: Re: Изменить значение в XML
Отправлено: a1ien от Июнь 10, 2011, 16:05
а если попробовать взять у этого элемента чайлда через QDomNode QDomNode::firstChild () и проверить уже его тип?
Можно даже уже не проверять после firstChild () уже даже setData заработал.