下面我用个简单的例子说明如何使用tinyXML操作xml文件。在讲例子之前我先说说tinyXML中主要类和xml文档之间的对应关系。下面是tinyXML中主要class的类图,反应各个类之间的静态关系。
引用来自tinyXML文档
TiXmlBase是所有类的基类,TiXmlNode、TiXmlAttribute两个类都继承来自TiXmlBase类,其中TiXmlNode类指的是所有被<...>...<.../>包括的内容,而xml中的节点又具体分为以下几方面内容,分别是声明、注释、节点以及节点间的文本,因此在TiXmlNode的基础上又衍生出这几个类TiXmlComment、TiXmlDeclaration、TiXmlDocument、TiXmlElement、TiXmlText、TiXmlUnknown,分别用来指明具体是xml中的哪一部分。TiXmlAttribute类不同于TiXmlNode,它指的是在尖括号里面的内容,像<... ***=...>,其中***就是一个属性。这块我具体用一个xml文档说明一下,内容如下:
引用来自tinyXML文档
TiXmlBase是所有类的基类,TiXmlNode、TiXmlAttribute两个类都继承来自TiXmlBase类,其中TiXmlNode类指的是所有被<...>...<.../>包括的内容,而xml中的节点又具体分为以下几方面内容,分别是声明、注释、节点以及节点间的文本,因此在TiXmlNode的基础上又衍生出这几个类TiXmlComment、TiXmlDeclaration、TiXmlDocument、TiXmlElement、TiXmlText、TiXmlUnknown,分别用来指明具体是xml中的哪一部分。TiXmlAttribute类不同于TiXmlNode,它指的是在尖括号里面的内容,像<... ***=...>,其中***就是一个属性。这块我具体用一个xml文档说明一下,内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <phonebook>
- <!--one item behalfs one contacted person.-->
- <item>
- <name>miaomaio</name>
- <addr>Shaanxi Xi'an</addr>
- <tel>13759911917</tel>
- <email>miaomiao@home.com</email>
- </item>
- <item>
- <name>gougou</name>
- <addr>Liaoning Shenyang</addr>
- <tel>15840330481</tel>
- <email>gougou@home.com</email>
- </item>
- <!--more contacted persons.-->
- </phonebook>
- 像TiXmlDeclaration指的就是<?xml version="1.0" encoding="UTF-8"?>,
- 像TiXmlComment指的就是<!--one item behalfs one contacted person.-->、 <!--more contacted persons.-->,
- 像TiXmlDocument指的就是整个xml文档,
- 像TiXmlElement指的就是<phonebook>、<item>、<name>、<addr>等等这些节点,
- 像TiXmlText指的就是‘gougou’、‘15840330481’这些夹在<item>与</item>、<name>与</name>、<addr>与</addr>之间的文本文字,
- 像TiXmlAttribute指的就是<?xml version="1.0" encoding="UTF-8"?>节点中version、encoding,
- 除此之外就是TiXmlUnknown。
int
Write()
{
TiXmlDocument doc ;
TiXmlDeclaration * declare = new TiXmlDeclaration( " 1.0 " , "" , "" );
doc.LinkEndChild(declare);
doc.LinkEndChild( new TiXmlComment( " 群英集团人力资源表 " ));
TiXmlElement * root = new TiXmlElement( " 群英集团 " );
TiXmlElement * sub = new TiXmlElement( " 员工 " );
sub -> SetAttribute( " ID " , " 011 " ); // 向sub中添加属性
sub -> SetAttribute( " 职位 " , " 技术总监 " );
TiXmlElement * child = new TiXmlElement( " 姓名 " ); // 建立子元素
TiXmlText * content = new TiXmlText( " 虚竹 " ); // 建立文本
child -> LinkEndChild(content); // 将建立的文本追加到child所指的子元素中
sub -> LinkEndChild(child); // 将child追加到sub中,以作为子元素
root -> LinkEndChild(sub); // 将sub追加到root中,以作为子元素
sub = new TiXmlElement( " 员工 " );
sub -> SetAttribute( " ID " , " 029 " );
sub -> SetAttribute( " 职位 " , " 技术总监 " );
child = new TiXmlElement( " 姓名 " );
content = new TiXmlText( " 乔峰 " );
child -> LinkEndChild(content);
sub -> LinkEndChild(child);
root -> LinkEndChild(sub);
sub = new TiXmlElement( " 员工 " );
sub -> SetAttribute( " ID " , " 100 " );
sub -> SetAttribute( " 职位 " , " 总架构师 " );
child = new TiXmlElement( " 姓名 " );
content = new TiXmlText( " 扫地僧 " );
child -> LinkEndChild(content);
sub -> LinkEndChild(child);
root -> LinkEndChild(sub);
sub = new TiXmlElement( " 员工 " );
sub -> SetAttribute( " ID " , " 101 " );
sub -> SetAttribute( " 职位 " , " 公关部经理 " );
child = new TiXmlElement( " 姓名 " );
content = new TiXmlText( " 韦小宝 " );
child -> LinkEndChild(content);
sub -> LinkEndChild(child);
root -> LinkEndChild(sub);
sub = new TiXmlElement( " 员工 " );
sub -> SetAttribute( " ID " , " 102 " );
sub -> SetAttribute( " 职位 " , " 人事部经理 " );
child = new TiXmlElement( " 姓名 " );
content = new TiXmlText( " 黄蓉 " );
child -> LinkEndChild(content);
sub -> LinkEndChild(child);
root -> LinkEndChild(sub);
doc.LinkEndChild(root);
doc.SaveFile( " WriteTest.xml " );
return 0 ;
}
{
TiXmlDocument doc ;
TiXmlDeclaration * declare = new TiXmlDeclaration( " 1.0 " , "" , "" );
doc.LinkEndChild(declare);
doc.LinkEndChild( new TiXmlComment( " 群英集团人力资源表 " ));
TiXmlElement * root = new TiXmlElement( " 群英集团 " );
TiXmlElement * sub = new TiXmlElement( " 员工 " );
sub -> SetAttribute( " ID " , " 011 " ); // 向sub中添加属性
sub -> SetAttribute( " 职位 " , " 技术总监 " );
TiXmlElement * child = new TiXmlElement( " 姓名 " ); // 建立子元素
TiXmlText * content = new TiXmlText( " 虚竹 " ); // 建立文本
child -> LinkEndChild(content); // 将建立的文本追加到child所指的子元素中
sub -> LinkEndChild(child); // 将child追加到sub中,以作为子元素
root -> LinkEndChild(sub); // 将sub追加到root中,以作为子元素
sub = new TiXmlElement( " 员工 " );
sub -> SetAttribute( " ID " , " 029 " );
sub -> SetAttribute( " 职位 " , " 技术总监 " );
child = new TiXmlElement( " 姓名 " );
content = new TiXmlText( " 乔峰 " );
child -> LinkEndChild(content);
sub -> LinkEndChild(child);
root -> LinkEndChild(sub);
sub = new TiXmlElement( " 员工 " );
sub -> SetAttribute( " ID " , " 100 " );
sub -> SetAttribute( " 职位 " , " 总架构师 " );
child = new TiXmlElement( " 姓名 " );
content = new TiXmlText( " 扫地僧 " );
child -> LinkEndChild(content);
sub -> LinkEndChild(child);
root -> LinkEndChild(sub);
sub = new TiXmlElement( " 员工 " );
sub -> SetAttribute( " ID " , " 101 " );
sub -> SetAttribute( " 职位 " , " 公关部经理 " );
child = new TiXmlElement( " 姓名 " );
content = new TiXmlText( " 韦小宝 " );
child -> LinkEndChild(content);
sub -> LinkEndChild(child);
root -> LinkEndChild(sub);
sub = new TiXmlElement( " 员工 " );
sub -> SetAttribute( " ID " , " 102 " );
sub -> SetAttribute( " 职位 " , " 人事部经理 " );
child = new TiXmlElement( " 姓名 " );
content = new TiXmlText( " 黄蓉 " );
child -> LinkEndChild(content);
sub -> LinkEndChild(child);
root -> LinkEndChild(sub);
doc.LinkEndChild(root);
doc.SaveFile( " WriteTest.xml " );
return 0 ;
}
输出效果:
<?
xml version="1.0"
?>
<!-- 群英集团人力资源表 -->
< 群英集团 >
< 员工 ID ="011" 职位 ="技术总监" >
< 姓名 > 虚竹 </ 姓名 >
</ 员工 >
< 员工 ID ="029" 职位 ="技术总监" >
< 姓名 > 乔峰 </ 姓名 >
</ 员工 >
< 员工 ID ="100" 职位 ="总架构师" >
< 姓名 > 扫地僧 </ 姓名 >
</ 员工 >
< 员工 ID ="101" 职位 ="公关部经理" >
< 姓名 > 韦小宝 </ 姓名 >
</ 员工 >
< 员工 ID ="102" 职位 ="人事部经理" >
< 姓名 > 黄蓉 </ 姓名 >
</ 员工 >
</ 群英集团 >
<!-- 群英集团人力资源表 -->
< 群英集团 >
< 员工 ID ="011" 职位 ="技术总监" >
< 姓名 > 虚竹 </ 姓名 >
</ 员工 >
< 员工 ID ="029" 职位 ="技术总监" >
< 姓名 > 乔峰 </ 姓名 >
</ 员工 >
< 员工 ID ="100" 职位 ="总架构师" >
< 姓名 > 扫地僧 </ 姓名 >
</ 员工 >
< 员工 ID ="101" 职位 ="公关部经理" >
< 姓名 > 韦小宝 </ 姓名 >
</ 员工 >
< 员工 ID ="102" 职位 ="人事部经理" >
< 姓名 > 黄蓉 </ 姓名 >
</ 员工 >
</ 群英集团 >