• XML工程配置文件的读写


      TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手。
    这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

    TinyXML版本:tinyxml_2_6_2

    运行环境windows

    里面有两个头文件 tinystr.h tinyxml.h
    四个源文件 tinystr.cpp tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp
    一个测试test文件 xmltest.cpp

    TiXmlBase:整个TinyXML模型的基类。
    TiXmlAttribute:对应于XML中的元素的属性。
    TiXmlNode:对应于DOM结构中的节点。
    TiXmlComment:对应于XML中的注释。
    TiXmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。
    TiXmlDocument:对应于XML的整个文档。
    TiXmlElement:对应于XML的元素。
    TiXmlText:对应于XML的文字部分。
    TiXmlUnknown:对应于XML的未知部分。
    TiXmlHandler:定义了针对XML的一些操作。

    建立一个简单的XML

    <?xml version="1.0" encoding="UTF-8"?>  
    <School name="计算机学院">  
        <Class name = "C++">  
            <Student name="王玲" number="052140">  
                <email>wangling@163.com</email>  
                <address>河南</address>           
            </Student>  
            <Student name="宋军" number="024561">  
                <email>songjun@gmail.com</email>  
                <address>河北</address>           
            </Student>  
        </Class>  
    </School>
    

    读取操作

    void __fastcall TForm1::readSchoolXml()
    {
        using namespace std;
        const char * xmlFile = "studentConfig.xml";
        TiXmlDocument doc;
        if (doc.LoadFile(xmlFile))
        {
            doc.Print();
        }
        else
        {
            cout << "can not parse xml studentConfig.xml" << endl;
            return;
        }
        TiXmlElement* rootElement = doc.RootElement();  //School元素
        TiXmlElement* classElement = rootElement->FirstChildElement();  // Class元素
        TiXmlElement* studentElement = classElement->FirstChildElement();  //Students
        for (; studentElement != NULL; studentElement = studentElement->NextSiblingElement() )
        {
            TiXmlAttribute* attributeOfStudent = studentElement->FirstAttribute();  //获得student的name属性
            for (;attributeOfStudent != NULL; attributeOfStudent = attributeOfStudent->Next() )
            {
                cout << attributeOfStudent->Name() << " : " << attributeOfStudent->Value() << std::endl;
            }
    
            TiXmlElement* studentContactElement = studentElement->FirstChildElement();//获得student的第一个联系方式
            for (; studentContactElement != NULL; studentContactElement = studentContactElement->NextSiblingElement() )
            {
                string contactType = studentContactElement->Value();
                string contactValue = studentContactElement->GetText();
                std::cout << contactType  << " : " << contactValue << std::endl;
            }
        }
    }

     存储操作

    void __fastcall TForm1:: writeSchoolXml()
    {
        using namespace std;
        const char * xmlFile = "conf/school-write.xml";
        TiXmlDocument doc;
        TiXmlDeclaration * decl = new TiXmlDeclaration("1.0", "", "");
        TiXmlElement * schoolElement = new TiXmlElement( "School" );
        TiXmlElement * classElement = new TiXmlElement( "Class" );
        classElement->SetAttribute("name", "C++");
    
        TiXmlElement * stu1Element = new TiXmlElement("Student");
        stu1Element->SetAttribute("name", "王玲");
        stu1Element->SetAttribute("number", "052140");
        TiXmlElement * stu1EmailElement = new TiXmlElement("email");
        stu1EmailElement->LinkEndChild(new TiXmlText("wangling@163.com") );
        TiXmlElement * stu1AddressElement = new TiXmlElement("address");
        stu1AddressElement->LinkEndChild(new TiXmlText("河南"));
        stu1Element->LinkEndChild(stu1EmailElement);
        stu1Element->LinkEndChild(stu1AddressElement);
    
        TiXmlElement * stu2Element = new TiXmlElement("Student");
        stu2Element->SetAttribute("name", "宋军");
        stu2Element->SetAttribute("number", "024561");
        TiXmlElement * stu2EmailElement = new TiXmlElement("email");
        stu2EmailElement->LinkEndChild(new TiXmlText("songjun@gmail.com"));
        TiXmlElement * stu2AddressElement = new TiXmlElement("address");
        stu2AddressElement->LinkEndChild(new TiXmlText("河北"));
        stu2Element->LinkEndChild(stu2EmailElement);
        stu2Element->LinkEndChild(stu2AddressElement);
    
        classElement->LinkEndChild(stu1Element);
        classElement->LinkEndChild(stu2Element);
        schoolElement->LinkEndChild(classElement);
    
        doc.LinkEndChild(decl);
        doc.LinkEndChild(schoolElement);
        doc.SaveFile(xmlFile);
    }
  • 相关阅读:
    [BTS] BizTalk host BizTalkServerApplication throttled because DatabaseSize exceeded the configured throttling limit.
    Linux sed 批量替换字符串方法
    MYSQL中的POSITION方法
    wc (Word Count)
    sudo
    关于数据库timestamp类型问题
    SQL中存储过程和自定义函数的区别
    数据库存储过程
    五 : springMVC拦截器
    四 : springMVC各种跳页面传值
  • 原文地址:https://www.cnblogs.com/mypsq/p/5089783.html
Copyright © 2020-2023  润新知