Qt利用QDomDocument去掉ts翻译文件中的vanished(丢失)多余节点项,使得使用linguist.exe打开后不会再显示灰色项。

#include

#include
#include
#include
#include
#include
#include
#include

bool remvoeTsFileVanished(const QString & strSrc,const QString & strDest)
{
    QDomDocument doc;
    QString errorMsg;
    int errorLine=0,errorColumn=0;
    QFile iFile(strSrc);
    iFile.open(QIODevice::ReadOnly);

    //bool bPase = doc.setContent(&iFile,&errorMsg,&errorLine,&errorColumn);
    QByteArray baContent = iFile.readAll();
    //qDebug() << baContent;
    bool bPase = doc.setContent(baContent,&errorMsg,&errorLine,&errorColumn);
    if(!bPase)
    {
        qDebug() << errorMsg << errorLine << errorColumn;
        return false;
    }
    iFile.close();

    QDomElement elemntTS = doc.elementsByTagName("TS").at(0).toElement();
    QDomNodeList nlContexts = elemntTS.elementsByTagName("context");
    for(int i=0;i     {
        QDomNode nodeContext = nlContexts.at(i);
        QDomNodeList nlMessages = nodeContext.toElement().elementsByTagName("message");
        int nCount = nlMessages.count();
        for(int j=0;j         {
            QDomNode nodeMessage = nlMessages.at(j);
            QDomElement elementTranslation = nodeMessage.firstChildElement("translation");
            if (elementTranslation.attribute("type") == "vanished")
            {
                nodeContext.removeChild(nodeMessage);
            }
            else
            {
                j++;
            }
        }
        nlMessages = nodeContext.toElement().elementsByTagName("message");
        nCount = nlMessages.count();
        nCount = 0;
    }

    QFile iFileWrite(strDest);
    if( !iFileWrite.open(QIODevice::ReadWrite|QIODevice::Truncate))
        return false;

    iFileWrite.write(doc.toByteArray());

    //QTextStream out(&iFileWrite);
    //out<     //qDebug() << doc.toByteArray();
    //qDebug() << doc.toString();
    //qDebug() << doc.toString().toHtmlEscaped();

    //QTextStream out(&iFileWrite);
    //doc.save(out, 4);

    iFileWrite.close();

    return true;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    if(0)
    {
        QDir(".").mkdir("./template");
        QStringList qmFiles = QDir(".").entryList(QStringList("*.ts"), QDir::Files, QDir::Name);
        foreach (QString strSrc,qmFiles)
        {
            QString strDest = "./template"+strSrc;
            bool bReturn = remvoeTsFileVanished(strSrc,strDest);
            qDebug() << QString("process <%1> to <%2> %3").arg(strSrc).arg(strDest).arg(bReturn?"success":"fail");
        }
    }
    QString strDest,strSrc;
    if(argc > 1)
    {
        strSrc = QString(argv[1]);
        strDest = QString(argv[1]);
    }
    if(argc > 2)
    {
        strDest = QString(argv[2]);
    }

    if(!strDest.isEmpty() && !strSrc.isEmpty())
    {
        bool bReturn = remvoeTsFileVanished(strSrc,strDest);
        qDebug() << QString("process <%1> to <%2> %3").arg(strSrc).arg(strDest).arg(bReturn?"success":"fail");
    }
    else
    {
        qDebug() << "user for :exe srcFile [destFile]";
    }
    return 0;
    return a.exec();
}
 

你可能感兴趣的:(Qt利用QDomDocument去掉ts翻译文件中的vanished(丢失)多余节点项,使得使用linguist.exe打开后不会再显示灰色项。)