TinyXML의 사용법...

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

TinyXML의 사용법...

Post by 비회원 »

안녕하세요. 게임크리에이터가 꿈인.... 지금 공부중인 한 학생입니다.

다름이 아니라 3D 모델을 띄우려고 맥스에서 파일을 XML 형식으로 빼는 것까지는

어떻게 하는지 알겠는데....(김용준님이 쓰신 책이 많은 도움이 되었습니다.)

빼놓은 데이터를 읽을려고 하니깐 XML 파서중 TinyXML 이라는게 있더군요....

그래서 그걸 사용하려고 했는데 도무지 쉽지가 않네요...

인터넷을 보고 사용법을 익혀서 할려고 했는데....

그대로 하니깐 잘 안되더군요...



#include <stdio>
#include <iostream>
#include "tinyxml.h"

#pragma comment (lib,"tinyxmld.lib")
#pragma comment (lib,"tinyxmld_STL.lib")

void main()
{
TiXmlDocument doc;

if( doc.LoadFile("test.xml" ) == false )
{
printf("NONONO\n");
return;
}
else printf("OK!!\n");


TiXmlNode* node = doc.FirstChild("root")->FirstChild("Vertex");

const char* a = node->Value();

printf("%s\n",*a);

printf("XML\n");
}


일단은 테스트로 이런식으로 했는데요...

TiXmlNode* node = doc.FirstChild("root")->FirstChild("Vertex"); 이부분에서

튕기더군요.... 그래서 일단 루트노드부터 읽어보잔 생각에 TiXmlNode* node = doc.FirstChild("root")만

하고 값을 읽으려고 한깐 이번에는

const char* a = node->Value(); 이라인에서 튕기네요....

XML 문법이 틀린것 같지는 않고...

제가 함수를 잘못사용한건가요?

노드 이동하는 것과 값만 읽어오는 것만 알면 어떻게든 될것 같은데..

고수님들의 많은 조언 부탁드립니다.
비회원

Post by 비회원 »

TiXmlElement를 사용하셔야 됩니다.

RootElement(), FirstChildElement("...")와 같은 함수를 쓰셔야하구요.

TiXmlNode를 상속받은 클래스들의 역할에 대해서 다시 살펴보시기를 권합니다.
비회원

저도 예전에 김용준님 포멧 사용 할 때 쓴 함수입니다.

Post by 비회원 »

무식하게 때려박은 코드에요~ ^^;

Code: Select all

LONG CAniLoader::GetObjectCount(TiXmlNode* &pNode,
                                LPCSTR pAttribute,
                                LPCSTR pAttriValue   )
{
	CHKFALSE(pNode);  
    		
    LONG iObjectCount=0; 
	TiXmlElement* tmpElement = 0;
	const char *strCompare = NULL;

	
	CHKFALSE(pNode);	
	pNode = pNode->FirstChild();
    if(pAttribute && pAttriValue)
    {		
    	while(pNode != NULL)
    	{
    	    tmpElement = pNode->ToElement();
            strCompare = tmpElement->Attribute(pAttribute);            
    		if(strCompare && 
               strncmp(strCompare,pAttriValue,strlen(pAttriValue)) == 0)
    		{
    		      iObjectCount++;    			
    			//MessageBox(NULL,boneElement->Attribute("Class"),"!!!",MB_OK);
    		}
    		strCompare = NULL;
    		pNode = pNode->NextSibling();
    	}
    }
    else
    {	
    	while(pNode != NULL)
    	{
    		tmpElement = pNode->ToElement();
    		iObjectCount++;
    		pNode = pNode->NextSibling();
    	}
    }
    return iObjectCount;
}
Locked