TinyXML中文指南四
2009-05-27 17:55
295 查看
dump_to_stdout的完整列表
下面是一个可直接运行的示例程序,使用上面提到过的递归遍历方式,可用来加载任意的XML文件并把结构输出到STDOUT上。
// 指南示例程序
#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::DOCUMENT:
printf( "Document"
);
break
;
case
TiXmlNode::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::COMMENT:
printf( "Comment: [%s]"
, pParent->Value());
break
;
case
TiXmlNode::UNKNOWN:
printf( "Unknown"
);
break
;
case
TiXmlNode::TEXT:
pText = pParent->ToText();
printf( "Text: [%s]"
, pText->Value() );
break
;
case
TiXmlNode::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[])
{
for
(int
i=1; i<argc; i++)
{
dump_to_stdout(argv[i]);
}
return
0;
}
从命令行或者DOS窗口运行它,例如:
C:/dev/tinyxml> Debug/tinyxml_1.exe example1.xml
example1.xml:
Document
+ Declaration
+ Element [Hello]
(No attributes)
+ Text: [World]
作者与修改
Ellers写于2005年4,5,6月
Lee Thomason于2005年9月略加编辑后集成到文档系统中
Ellers于2005年10月做了更新
下面是一个可直接运行的示例程序,使用上面提到过的递归遍历方式,可用来加载任意的XML文件并把结构输出到STDOUT上。
// 指南示例程序
#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::DOCUMENT:
printf( "Document"
);
break
;
case
TiXmlNode::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::COMMENT:
printf( "Comment: [%s]"
, pParent->Value());
break
;
case
TiXmlNode::UNKNOWN:
printf( "Unknown"
);
break
;
case
TiXmlNode::TEXT:
pText = pParent->ToText();
printf( "Text: [%s]"
, pText->Value() );
break
;
case
TiXmlNode::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[])
{
for
(int
i=1; i<argc; i++)
{
dump_to_stdout(argv[i]);
}
return
0;
}
从命令行或者DOS窗口运行它,例如:
C:/dev/tinyxml> Debug/tinyxml_1.exe example1.xml
example1.xml:
Document
+ Declaration
+ Element [Hello]
(No attributes)
+ Text: [World]
作者与修改
Ellers写于2005年4,5,6月
Lee Thomason于2005年9月略加编辑后集成到文档系统中
Ellers于2005年10月做了更新
相关文章推荐
- TinyXML Tutorial 中文指南
- TinyXML Tutorial 中文指南
- zz TinyXML Tutorial 中文指南
- TinyXML Tutorial 中文指南
- TinyXML 中文指南
- TinyXML Tutorial 中文指南
- TinyXML Tutorial 中文指南
- TinyXML Tutorial 中文指南
- (转)TinyXML Tutorial 中文指南
- TinyXML Tutorial 中文指南
- TinyXML Tutorial 中文指南
- TinyXML 指南
- TinyXML 指南
- TinyXML中文文档
- tiny中文乱码问题,不过仅适用于windows,所以xml不可以出现中文
- tinyxml读取中文时显示乱码的解决方法
- TinyXML中文文档
- tiny中文乱码问题,不过仅适用于windows,所以xml不可以出现中文
- TinyXML中文文档
- 初学TinyXml,要注意的细节,网上很难找到的中文问题,stream内存管理问题