码迷,mamicode.com
首页 > 其他好文 > 详细

XML工程配置文件的读写

时间:2015-12-30 19:36:17      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

  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);
}

 

XML工程配置文件的读写

标签:

原文地址:http://www.cnblogs.com/mypsq/p/5089783.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!