crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Помогите реализовать функцию-парсер XML, (Помогите проекту переводов)
Litkevich Yuriy
  опции профиля:
сообщение 20.5.2008, 13:48
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Самому некогда разбираться с XML поэтому прошу помочь, а именно написать за меня функцию.
Задача такая. Есть файлы *.ts как выглядят можно посмотреть в каталоге %QTDIR%/translations. В них есть понятие контекст:
<context>
    <name>AboutDialog</name>
    <message>
        <location filename="trwindow.cpp" line="970"/>
        <source>Qt Linguist</source>
        <translation>Qt Linguist</translation>
    </message>
</context>

из файла нужно извлечь имена всех контекстов, в приведенном фрагменте это AboutDialog, выглядеть функция должна, например, так:
QStringList GetListFrom(QFile *tsfile);

Т.е. я передаю файл в функцию, а она мне возвращает список имен контекстов.

Может кто осилит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ViGOur
  опции профиля:
сообщение 20.5.2008, 16:59
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Примерно так, можно перечислить все ветки name:
#include <QtCore/QCoreApplication>

#include <QDomDocument>
#include <QFile>
#include <QStringList>

QStringList GetListFrom(QFile *device)
{
    QStringList list;

    QString errorStr;
    int errorLine;
    int errorColumn;
    QDomDocument doc;
    if (!doc.setContent( device, false, &errorStr, &errorLine, &errorColumn))
    {
        qDebug( "%s", QObject::tr("Parse 2 error at line %1, column %2:\n%3")
                        .arg(errorLine)
                        .arg(errorColumn)
                        .arg(errorStr));
        return list;
    }

    QDomElement root = doc.firstChildElement("TS");
    QDomElement context = root.firstChildElement("context");
    QString szValue = context.nodeValue();
    for(; !context.isNull(); context = context.nextSiblingElement("context"))
    {
        QDomElement name = context.firstChildElement( "name");
        QString szName = name.nodeName();
        QString szValue = name.nodeValue();

        list.append( szValue);

        qDebug( "%s=%s", qPrintable( szName), qPrintable( szValue));
    }

    return list;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile device("D:\\LIBS\\qt\\ce4.3.0\\translations\\designer_de.ts");
    device.open( QIODevice::ReadOnly);
    GetListFrom( &device);

    return a.exec();
}
только вот пока не могу понять, как получить значение ветки (szValue), в моем варианте оно всегда пустое... :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.2.2025, 0:21