#include "./xml/tinystr.h"#include "./xml/tinyxml.h"#include <string>#include <iostream>#include <cstdio>#include <errno.h>using namespace std;void read_xml(const char *path,string &content);void read_element(const TiXmlNode *p,string &content);int main(){ string str; read_xml("config.xml",str); TiXmlDocument document; document.Parse(str.c_str()); FILE *pFile=fopen("copy.xml","w+"); if(NULL==pFile) { cerr<<strerror(errno)<<endl; } else { if(!document.SaveFile(pFile)) cerr<<strerror(errno)<<endl; fclose(pFile); } return 0;}void read_xml(const char *path,string &content){ TiXmlDocument Document=TiXmlDocument(path); if(!Document.LoadFile()) { fprintf(stderr,"LoadFile error: %s\n",strerror(errno)); return; } TiXmlNode *pNode=Document.FirstChild(); for(;pNode!=NULL;pNode=pNode->NextSibling()) { switch(pNode->Type()) { case TiXmlText::TINYXML_ELEMENT: read_element(pNode->ToElement(),content); break; case TiXmlText::TINYXML_DECLARATION: content+="<?xml version=\""; content+=pNode->ToDeclaration()->Version(); content+="\" encoding=\""; content+=pNode->ToDeclaration()->Encoding(); content+="\" standalone=\""; content+=pNode->ToDeclaration()->Standalone(); content+="\" ?>\n"; break; case TiXmlText::TINYXML_COMMENT: content+="<!--"; content+=pNode->ToComment()->Value(); content+="-->"; content+="\n"; break; default: break; } }}void read_element(const TiXmlNode *p,string &content){ if(NULL==p) return; switch(p->Type()) { case TiXmlText::TINYXML_ELEMENT: { content+="<"; content+=p->ToElement()->Value(); content+=">\n"; const TiXmlNode *pNode; for(pNode=p->FirstChild();pNode!=NULL;pNode=pNode->NextSibling()) { read_element(pNode,content); } content+="</"; content+=p->ToElement()->Value(); content+=">\n"; break; } case TiXmlText::TINYXML_TEXT: { content+=p->ToText()->Value(); content+="\n"; break; } case TiXmlText::TINYXML_COMMENT: { content+="<!--"; content+=p->ToComment()->Value(); content+="-->"; content+="\n"; break; } default: content+="unknown node type\n"; break; }}