需要解析的文件如下
<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;
}