长风破浪会有时,直挂云帆济沧海

Dream Word

博客园 首页 新随笔 联系 订阅 管理
//Dom方式更改节点信息
bool XmlTools::SetValue(QString name,float exposure,float gain,float gamma,int brightness)
{
#if 0
    QFile file("fileName.xml");
    if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
        return -2;
    QTextStream out(&file);
    QDomDocument doc;
    QDomText text;
    QDomElement element;
    QDomAttr attr;
    QDomProcessingInstruction instruction;
    instruction = doc.createProcessingInstruction( "xml", "version = \'1.0\' encoding=\'UTF-8\'" );
    doc.appendChild( instruction );

    QDomElement root = doc.createElement( "COMMAND" );
    doc.appendChild(root);
    element = doc.createElement( "OBJECT" );
    text = doc.createTextNode( "USER" );
    element.appendChild(text);
    root.appendChild(element);

    element = doc.createElement( "ACTION" );
    text = doc.createTextNode( "LOGIN" );
    element.appendChild(text);
    root.appendChild(element);

    element = doc.createElement( "DATA" );
    root.appendChild(element);

    QDomElement userElement = doc.createElement( "USERINFO" );
    attr = doc.createAttribute( "NAME" );
    attr.setValue("root");
    userElement.setAttributeNode(attr);
    attr = doc.createAttribute( "PASSWORD" );
    attr.setValue("123456");
    userElement.setAttributeNode(attr);
    element.appendChild(userElement);

    doc.save(out, 4);       //each line space of file is 4
    return 0;
#else if
        QDomDocument doc;
        QFile file("config/3vcam.xml");
        QString error = "";
        int row = 0, column = 0;
        if (!file.open(QIODevice::ReadOnly)) return -2;

        if(!doc.setContent(&file, false, &error, &row, &column))
        {
            qDebug() << "parse file failed:" << row << "---" << column <<":" <<error;
            file.close();
            return -1;
        }

        file.close();

        QDomElement root = doc.documentElement();
        QDomNode node = root.firstChild();
        while(!node.isNull())
        {
           QDomElement element = node.toElement(); // try to convert the node to an element.
           if(!element.isNull())
           {
              qDebug()<<element.tagName() << ":" << element.text();
              printf("element.tagName:%s,element.text:%s\n",element.tagName().toLatin1().data(),element.text().toLatin1().data());
              fflush(stdout);
              if (element.hasAttribute("id"))
              {
                    printf("---id:%s---\n",element.attributeNode("id").value().toLatin1().data());
              }
              QDomNode nodeson = element.firstChild();
              bool bNeedUpdate = false;
              while(!nodeson.isNull())
              {
                  QDomElement elementson = nodeson.toElement();
                  if(!elementson.isNull())
                  {
                      if (elementson.tagName() == "name" && name == elementson.text())
                      {
                          printf("---name:%s---\n",elementson.text().toLatin1().data());
                          bNeedUpdate = true;
                      }
                      else if(elementson.tagName() == "exposure" && bNeedUpdate)
                      {

                          printf("---exposure:%s---\n",elementson.text().toLatin1().data());
                          nodeson.firstChild().setNodeValue(QString::number(exposure));
                      }
                      else if(elementson.tagName() == "gain" && bNeedUpdate)
                      {

                          printf("---gain:%s---\n",elementson.text().toLatin1().data());
                          nodeson.firstChild().setNodeValue(QString::number(gain));
                      }
                      else if(elementson.tagName() == "gamma" && bNeedUpdate)
                      {

                          printf("---gamma:%s---\n",elementson.text().toLatin1().data());
                          nodeson.firstChild().setNodeValue(QString::number(gamma));
                      }
                      else if(elementson.tagName() == "brightness" && bNeedUpdate)
                      {
                          bNeedUpdate = false;
                          printf("---brightness:%s---\n",elementson.text().toLatin1().data());
                          nodeson.firstChild().setNodeValue(QString::number(brightness));
                      }
                  }
                  nodeson = nodeson.nextSibling();
              }
           }
           node = node.nextSibling();
        }


        QFile file2("config/3vcam.xml");
        if (!file2.open(QIODevice::WriteOnly | QIODevice::Truncate)) return -2;
        QTextStream out(&file2);
        doc.save(out, 4);
        file2.close();

        return 0;

#endif
}

 

posted on 2018-07-06 17:56  长风II  阅读(110)  评论(0编辑  收藏  举报