一个是用tinyxml遍历xml的源码

来源:互联网 发布:淘宝买防静电鞋 编辑:程序博客网 时间:2024/05/21 16:58
// XMLConsole.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "tinyxml.h"// ———————————————————————-// STDOUT输出和缩进实用函数// ———————————————————————-const unsigned int NUM_INDENTS_PER_SPACE=2;const char * getIndent( unsigned int numIndents ){static const char * pINDENT=" + ";static const unsigned int LENGTH=strlen( pINDENT );unsigned int n=numIndents*NUM_INDENTS_PER_SPACE;if ( n > LENGTH ) n = LENGTH;return &pINDENT[ LENGTH-n ];}// 与getIndent相同,但最后没有“+”const char * getIndentAlt( unsigned int numIndents ){static const char * pINDENT=" ";static const unsigned int LENGTH=strlen( pINDENT );unsigned int n=numIndents*NUM_INDENTS_PER_SPACE;if ( n > LENGTH ) n = LENGTH;return &pINDENT[ LENGTH-n ];}int dump_attribs_to_stdout(TiXmlElement* pElement, unsigned int indent){if ( !pElement ) return 0;TiXmlAttribute* pAttrib=pElement->FirstAttribute();int i=0;int ival;double dval;const char* pIndent=getIndent(indent);printf("\n");while (pAttrib){printf( "%s%s: value=[%s]", pIndent, pAttrib->Name(), pAttrib->Value());if (pAttrib->QueryIntValue(&ival)==TIXML_SUCCESS) printf( " int=%d", ival);if (pAttrib->QueryDoubleValue(&dval)==TIXML_SUCCESS) printf( " d=%1.1f", dval);printf( "\n" );i++;pAttrib=pAttrib->Next();}return i; }void dump_to_stdout( TiXmlNode* pParent, unsigned int indent = 0 ){if ( !pParent ) return;TiXmlNode* pChild;TiXmlText* pText;int t = pParent->Type();printf( "%s", getIndent(indent));int num;switch ( t ){case TiXmlNode::TINYXML_DOCUMENT:printf( "Document" );break;case TiXmlNode::TINYXML_ELEMENT:printf( "Element [%s]", pParent->Value() );num=dump_attribs_to_stdout(pParent->ToElement(), indent+1);switch(num){case 0: printf( " (No attributes)"); break;case 1: printf( "%s1 attribute", getIndentAlt(indent)); break;default: printf( "%s%d attributes", getIndentAlt(indent), num); break;}break;case TiXmlNode::TINYXML_COMMENT:printf( "Comment: [%s]", pParent->Value());break;case TiXmlNode::TINYXML_UNKNOWN:printf( "Unknown" );break;case TiXmlNode::TINYXML_TEXT:pText = pParent->ToText();printf( "Text: [%s]", pText->Value() );break;case TiXmlNode::TINYXML_DECLARATION:printf( "Declaration" );break;default:break;}printf( "\n" );for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling()) {dump_to_stdout( pChild, indent+1 );}}// 加载指定的文件并把它的结构输出到STDOUT上void dump_to_stdout(const char* pFilename){TiXmlDocument doc(pFilename);bool loadOkay = doc.LoadFile();if (loadOkay){printf("\n%s:\n", pFilename);dump_to_stdout( &doc ); }else{printf("Failed to load file \"%s\"\n", pFilename);}}// ———————————————————————-// main(),打印出从命令行指定的文件// ———————————————————————-int main(int argc, char* argv[]){_asm int 3for (int i=1; i<argc; i++){dump_to_stdout(argv[i]);}return 0;}


_asm int 3是调试的时候用了,可以去掉

在后续的处理XML中发现一个文件,假如在xml中是提取的要显示的内容,如果内容中出现"<"或者">"就不能够正确解析。不知道是怎么回事?

原创粉丝点击