2015-06-15 3 views
0

Я пытаюсь изменить атрибут 0tsфайла .ts в Qt, используя сам Qt.Изменить значение атрибута тега XML в Qt

Вот пример XML-формата.

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE TS> 
<TS language="es_ES" version="2.1"> 
    ... 
</TS> 

Я пробовал разные способы, но не повезло. Вот методы, которые я использовал.

FileIOError FileIO::changeLanguageOfTsFile(QString tsFileName, QString langCode) 
{ 
    QDomDocument tsFileXml; 
    QFile xmlFile(tsFileName); 

    if (!xmlFile.open(QIODevice::ReadWrite)) 
    { 
     qDebug() << "File not found." << endl; 
     return FileNotFound; 
    } 

    if (!tsFileXml.setContent(&xmlFile)) 
    { 
     qDebug() << "Invalid content in the XML file : Reading TS File. " << tsFileName << endl; 
     xmlFile.close(); 
     return InvalidXmlFile; 
    } 

    QDomElement ts = tsFileXml.firstChildElement("TS"); 

    if (ts.isNull()) 
    { 
     qDebug() << "Invalid TS file" << endl; 
     return InvalidFile; 
    } 

    // In here, I try to change the attribute. 
    QDomAttr attr = ts.attributeNode("language"); 
    attr.setValue(langCode); 
    ts.setAttributeNode(attr); 
    xmlFile.close(); 

    return ReadSuccess; 
} 

Код работает отлично, но XML-файл не обновляется.

Я также попробовал следующее.

ts.setAttribute("language", langCode); 

Но не повезло. Я не знаю, почему это не обновляет XML-файл. Пожалуйста, помогите мне.

+2

Я не настолько осведомлен о Qt, но, скорее всего, 'tsFileXml' только в памяти, вам нужно фактически записать (модифицированный) XML в файл. –

+0

Да, это была проблема. Благодарю. –

ответ

1

Я думаю, но я думаю, что ваш XML присутствует только в вашей памяти. Вы должны вызвать что-то вроде tsFileXml.WriteToFile(filename), чтобы сохранить ваши изменения в файле на вашей файловой системе.

+0

OMG, такой я дурак. Теперь я использовал QTextStream, чтобы записать его, и он работает отлично. Большое спасибо. –

Смежные вопросы