Самому некогда разбираться с 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>
QStringList GetListFrom(QFile *tsfile);
Примерно так, можно перечислить все ветки 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), в моем варианте оно всегда пустое...
вот поэтому я и прошу помощи, т.к. времени на разбор полетов не могу выкроить, но тебя могу успокоить, пример %QTDIR%\examples\itemviews\simpledommodel
тоже невидит имя контекста
Я думаю, все эти САКСы и ДОМы, есть ересь, надо какой-нибудь интелектуальнотупой метод, чтобы интелект заканчивался на понимании элементов (тэгов) как таковых, и перебирать это все в ручную, наманер этого:
если попался открывающийся тэг, то читаем текст после него до следующего тега.....
как-то так
PS Хотя нет, я вру видит, не там смотрел
Вместо nodeValue() нужно использовать text().
Tonal, в яблочко!
вместо
QString szValue = name.nodeValue();
QString szValue = name.text();
TS File: "H:/Qt/4.3.4/STD/translations/designer_ru.ts"
0 : "name" = "FormWindowSettings"
1 : "name" = "NewForm"
2 : "name" = "Oubliette"
3 : "name" = "PluginDialog"
4 : "name" = "PreferencesDialog"
5 : "name" = "QDesigner"
6 : "name" = "QDesignerActionEditor"
7 : "name" = "QDesignerActions"
8 : "name" = "QDesignerFormWindow"
9 : "name" = "QDesignerObjectInspector"
10 : "name" = "QDesignerPropertyEditor"
11 : "name" = "QDesignerResourceEditor"
12 : "name" = "QDesignerSignalSlotEditor"
13 : "name" = "QDesignerWidgetBox"
14 : "name" = "QDesignerWorkbench"
15 : "name" = "QObject"
16 : "name" = "SaveFormAsTemplate"
17 : "name" = "VersionDialog"
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)