TinyXML3

main.cpp

#include <stdio.h>
#include <windows.h>
#include <tinyxml.h>
#pragma comment (lib,"tinyxmld.lib")

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];
}

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)
{
	assert(pElement);
	if (pElement==NULL) return 0;

	int i=0,ival=0;
	double dval=0;
	const char* pIndent=getIndentAlt(indent);

	TiXmlAttribute* pAttrib=pElement->FirstAttribute();
	
	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* pParnet,unsigned int indent=0)
{
	assert(pParnet);
	if (pParnet==NULL)return;

	TiXmlNode* pChild=NULL;
	TiXmlText* pText=NULL;

	int t=pParnet->Type();
	printf("%s\n",getIndent(indent));

	int num=0;

	switch(t)
	{
	case TiXmlNode::DOCUMENT:
		{
			printf("Document");
		}
		break;
	case TiXmlNode::ELEMENT:
		{
			printf("Element [%s]",pParnet->Value());
			num=dump_attribs_to_stdout(pParnet->ToElement(),indent+1);
			switch(num)
			{
			case 0: printf("No attributes\n");break;
			case 1: printf("%s1 attoribute\n",getIndentAlt(indent));break;
			default:printf("%s%d attributes",getIndentAlt(indent),num);break;
			}
		}
		break;
	case TiXmlNode::COMMENT:
		{
			printf("Comment: [%s]",pParnet->Value());
		}
		break;
	case TiXmlNode::UNKNOWN:
		{
			printf("Unknown");
		}
		break;
	case TiXmlNode::TEXT:
		{
			pText=pParnet->ToText();
			printf("Text: [%s]",pText->Value());
		}
		break;
	case TiXmlNode::DECLARATION:
		{
			printf("Declaration");
		}
		break;
	default:
		break;
	}

	printf("\n");

	for (pChild=pParnet->FirstChild();pChild!=0;pChild=pChild->NextSibling())
	{
		dump_to_stdout(pChild,indent+1);
	}
}

void dump_to_stdout(const char* pFileName)
{
	TiXmlDocument doc(pFileName);
    bool loadOkay=doc.LoadFile();
	if (loadOkay)
	{
		printf("%s\n",pFileName);
		dump_to_stdout(&doc);
	}
	else
	{
		printf("Failed to load file %s\n",pFileName);
	}
}


int main (void)
{
   
	dump_to_stdout(TEXT("1.xml"));


	getchar();
	return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值