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

#include <QCoreApplication>

#include <QDomDocument>
#include <QDomElement>
#include <QDomNodeList>
#include <QDir>
#include <QStringList>
#include <QIODevice>
#include <QDebug>

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<nlContexts.count();i++)
    {
        QDomNode nodeContext = nlContexts.at(i);
        QDomNodeList nlMessages = nodeContext.toElement().elementsByTagName("message");
        int nCount = nlMessages.count();
        for(int j=0;j<nlMessages.count();)
        {
            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<<doc.toString();
    //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();
}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值