不用使用MS的大型的COM组建去读写xml,有了这个东西,其实就是很小的几个文件,可以方便的读写xml,因为不依赖windows的东西,所以你就可以很方便的把它搬到linux下面了。
下面是我写的简单读写xml的片段代码:
TiXmlDocument doc( pFile );
bool bLoad = doc.LoadFile();
if ( !bLoad )
{
Print( “failed to load file” );
return;
}
doc.Print( stdout );
// read
TiXmlHandle hDoc(&doc);
TiXmlNode *pNode = NULL;
TiXmlElement *pEle = NULL;
pEle = hDoc.FirstChildElement().Element();
Print( pEle->Value());
TiXmlElement *pEle1 = pEle->FirstChildElement();
Print( pEle1->Value());
const char *p1 = pEle1->GetText();
Print( p1 );
TiXmlElement *pEle2 = pEle1->NextSiblingElement();
Print( pEle2->Value());
const char *p2 = pEle2->GetText();
Print( p2 );
TiXmlElement *pEle3 = pEle2->NextSiblingElement();
std::string s;
s = pEle3->Attribute( “priority” );
Print( s.c_str());
s = pEle3->Attribute( “local” );
int n = 0;
Print( s.c_str());
s = pEle3->Attribute( “count”, &n );
Print( s.c_str());
const char *p3 = pEle3->GetText();
Print( p3 );
Print( pEle3->Value());
// write
//TiXmlNode *pTemp = pEle3->InsertAfterChild( hDoc.FirstChildElement().Child( “port”, 0 ).Node(), *pEle2->Clone() );
TiXmlNode *pTemp = pEle3->LinkEndChild( pEle2->Clone());
if ( NULL == pTemp )
{
Print( “failed to insert” );
Print( doc.ErrorDesc());
}
doc.SaveFile();
读写的xml文件的内容我也列出来:
<!– this is a sample xml file to be tested with tinyxml
–>
<test>
<config>count=1 title=“home”</config>
<home>address=“yishun”</home>
<port priority=”1″ local=”flase” count=”5″>55112
<value>55112</value>
</port>
</test>
执行我写的这段代码,xml文件就变成这个样子:
<!– this is a sample xml file to be tested with tinyxml
–>
<test>
<config>count=1 title="home"</config>
<home>address="yishun"</home>
<port priority=”1″ local=”flase” count=”5″>55112
<value>55112</value>
<home>address="yishun"</home>
</port>
</test>
上面很容易的看出来,哪些是读哪些是写了。
注意":是”的意思,我自己的写的是”,但是再被tiny保存一遍就变成这个样子了,但是xml读上面的这个文件没有任何问题。
注意: tinyxml不支持如下格式:
<value
here is text
/>
支持的格式是:
<value>
here is text
</value>
注意:tinyxml不会解析文本的等号,例如上面的here is text前面有个v1=,也就是变成:
<value>
v1=here is text
</value>
如果你要出入v1让它替你直接读出here is text,它做不到,你需要读出整个字串,自己分析。但是你可以把上面的一长串东西变成:
<value v1=“here is text”>
</value>
这样v1就变成了它的属性,就可以直接读出了。
我把整个工程(vs2005)上传了,包括测试文件,可以下面的连接得到:
http://download.csdn.net/source/3449562
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.