由于看到网上对C++下的xml类库中tinyxml的评价比较好,因此,在最近的一个项目里上手使用了一下,发现该类对XML操作的封装的确不错。
首先贴上要操作的XML内容
<root>
<result>1</result><resultmsg>当result节点为0时,该节点为错误消息,否则为空</resultmsg>
<filenum>2</filenum>
<files>
<filename>Report\2015001011\2015001011-张三-11002.pdf</filename>
<filename>Report\2015001011\2015001011-张三-11003.pdf</filename>
</files>
</root>
然后,新建一个CB工程,将tinystr.h,tinystr.cpp,tinyxml.cpp,tinyxml.h以及tinyxmlparser.cpp文件添加到工程中,然后修改tinyxmlparser.cpp中的SetError函数,将其直接返回,否则链接的时候会提示无法链接上tinyxml.h中的errorinfo数组。
然后在工程的主界面CPP文件中,打开xml文件进行操作
void __fastcall TForm1::btn1Click(TObject *Sender)
{
TiXmlDocument *myDocument = new TiXmlDocument("c:\\SB.xml");
if(myDocument != NULL)
{
myDocument->LoadFile();
TiXmlElement * RootEle = myDocument->RootElement();
if(RootEle != NULL)
{
TiXmlElement * successnode = RootEle->FirstChildElement();
if(successnode)
{
AnsiString sSuccess = successnode->GetText();
TiXmlElement* eleErrorMsg = successnode->NextSiblingElement();
if(sSuccess == "0")
{
ShowMessage(eleErrorMsg->GetText());
}
else
{
TiXmlElement* eleFileNum = eleErrorMsg->NextSiblingElement();
if(eleFileNum)
{
int nFileNum = StrToInt(eleFileNum->GetText());
TiXmlElement* eleFiles = eleFileNum->NextSiblingElement();
TiXmlElement* eleFile = eleFiles->FirstChildElement();
for(int i = 0; i < nFileNum; i++)
{
AnsiString sFilePath = sFilePath = eleFile->GetText();
eleFile = eleFile->NextSiblingElement();
}
}
}
}
}
}
myDocument->Clear();
delete myDocument;
}
//---------------------------------------------------------------------------
封装好的效果和C#中的XMLDOCUMENT类十分接近,使用起来很方便。