tinyXML生成与解析

需要解析的文件如下

<company name="广东凯通">
 <department name="研发部">
  <staff name="张三" payment="102"/>
  <staff name="李四" payment="150"/>
 </department>
 <department name="市场部">
  <staff name="王五" payment="130"/>
 </department>

</company>

--------------------------------------------------------------------

#include <iostream>

#include <string>

#include "tinystr.h"
#include "tinyxml.h"


using namespace std;


void readXmlFile() 
{
    const char * xmlFile = "school-write.xml";
    TiXmlDocument doc;                              
    if (doc.LoadFile(xmlFile)) {
        doc.Print();
    } else {
        cout << "can not parse xml school-write.xml" << endl;
        return;
    }
    TiXmlElement* rootElement = doc.RootElement();  //School元素  
TiXmlElement* departMentElement = rootElement->FirstChildElement();
    for (; departMentElement != NULL; departMentElement = departMentElement->NextSiblingElement() )
{
//获得student的name属性  
        TiXmlAttribute* attributeOfDepartMent = departMentElement->FirstAttribute();
        for (;attributeOfDepartMent != NULL; attributeOfDepartMent = attributeOfDepartMent->Next() ) 
{
            cout << attributeOfDepartMent->Name() << " : " << attributeOfDepartMent->Value() << std::endl;       
        }                                 

//获得student的第一个联系方式
        TiXmlElement* StaffElement = departMentElement->FirstChildElement();        
TiXmlAttribute* attributeOfStaff = StaffElement->FirstAttribute();
for (;attributeOfStaff != NULL; attributeOfStaff = attributeOfStaff->Next() ) 
{
            cout << attributeOfStaff->Name() << " : " <<attributeOfStaff->Value() << std::endl;       
        }    

    }
}


void writeSchoolXml() 
{
    const char * xmlFile = "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", "tinyxml");
    stu1Element->SetAttribute("number", "123");
    TiXmlElement * stu1EmailElement = new TiXmlElement("email");
    stu1EmailElement->LinkEndChild(new TiXmlText("tinyxml@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", "jsoncpp");
    stu2Element->SetAttribute("number", "456");
    TiXmlElement * stu2EmailElement = new TiXmlElement("email");
    stu2EmailElement->LinkEndChild(new TiXmlText("jsoncpp@163.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);  
}




void WriteXmlFile()
{
TiXmlDocument XmlDoc;
TiXmlDeclaration *XmlDel = new TiXmlDeclaration("1.0", "gb2312", "");

//公司
TiXmlElement *CompanyElement  = new TiXmlElement("Company");
CompanyElement->SetAttribute("name", "凯通");

//研发部
TiXmlElement *RD_DepartmentElement  = new TiXmlElement("department");
RD_DepartmentElement->SetAttribute("name", "研发部");
TiXmlElement *RD_StaffElement1    = new TiXmlElement("staff");
RD_StaffElement1->SetAttribute("name", "张三");
RD_StaffElement1->SetAttribute("payment", "102");
TiXmlElement *RD_StaffElement2    = new TiXmlElement("staff");
RD_StaffElement2->SetAttribute("name", "李四");
RD_StaffElement2->SetAttribute("payment", "150");

//市场部
TiXmlElement *MarketDepartmentElement  = new TiXmlElement("department");
MarketDepartmentElement->SetAttribute("name", "市场部");
TiXmlElement *MarketStaffElement    = new TiXmlElement("staff");
MarketStaffElement ->SetAttribute("name", "王五");
MarketStaffElement ->SetAttribute("payment", "130");

RD_DepartmentElement->LinkEndChild(RD_StaffElement1);
RD_DepartmentElement->LinkEndChild(RD_StaffElement2);


MarketDepartmentElement->LinkEndChild(MarketStaffElement);

CompanyElement->LinkEndChild(RD_DepartmentElement);
CompanyElement->LinkEndChild(MarketDepartmentElement);
XmlDoc.LinkEndChild(XmlDel);
XmlDoc.LinkEndChild(CompanyElement);
XmlDoc.Print();


}



int main(int argc, char *argv[])
{
WriteXmlFile();



return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值