TinyXmlÀ» ÀÌ¿ëÇØ ÆíÇÏ°Ô Xml Node¸¦ Àаí ÀúÀåÇغ¸ÀÚ. ±¸Çö ÀÚüÀÇ ¼³¸í º¸´Ù´Â XmlNodeÀÇ »ç¿ë¹ý¿¡ ´ëÇؼ ÀÚ¼¼ÇÏ°Ô ´Ù·ê°ÍÀÌ´Ù.
»ç¿ëµÇ´Â ±â´ÉÀº Å©°Ô TinyXmlÀ» ´Ù·ç´Â XmlNode¿Í ¹®ÀÚ¿°ú ¼ýÀÚ º¯È¯À» ´Ù·ç´Â StringUtil ÇÔ¼öµéÀÌ´Ù.
<Xml³ëµå¿Í XmlÀÇ °ü°è>
XmlNode Ŭ·¡½º¸¦ Xml ±¸Á¶¿Í ºñ±³ÇØ º¸ÀÚ.
<?xml version="1.0" encoding="euc-kr" ?> <root> <actor race="human">ö¼ö</actor> </root>
xml version~~~ Çì´õ´Â ¹«½ÃÇÏ°í ³Ñ¾î°£´Ù. <root> ~~ </root>¿Í <actor> ~~ </actor>¸¦ XML¿ë¾î·Î "¿¤¸®¸ÕÆ®"¶ó ÇÑ´Ù. ö¼ö´Â "¿¤¸®¸ÕÆ® ³»¿ë", race="human"Àº ¼Ó¼ºÀ¸·Î race´Â "¼Ó¼ºÀ̸§", humanÀº "¼Ó¼º°ª"À̶ó ºÎ¸¥´Ù.
XmlNode¿¡¼´Â "¿¤¸®¸ÕÆ®", "³»¿ë", "¼Ó¼ºÀ̸§", "¼Ó¼º°ª"¿¡ ´ëÇؼ ´Ù·é´Ù.
¿¤¸®¸ÕÆ® : ¿¤¸®¸ÕÆ®ÀÇ À̸§À» °¡Á®¿À°Å³ª ¼³Á¤ÇÑ´Ù. ¿©±â¼´Â root³ª actor¸¦ ³ªÅ¸³½´Ù. std::string* XmlNode::GetName() XmlNode& XmlNode::SetName( const char* szName )
¿¤¸®¸ÕÆ® ³»¿ë: ¿¤¸®¸ÕÆ®ÀÇ ³»¿ëÀ» °¡Á®¿À°Å³ª ¼³Á¤ÇÑ´Ù. ¿©±â¼´Â ö¼ö¸¦ ³ªÅ¸³½´Ù. XmlNode& XmlNode::SetData( std::string data ) XmlNode& XmlNode::SetData( const char* pData ) std::string* XmlNode::GetData()
¼Ó¼ºÀ̸§°ú ¼Ó¼º°ª: ¼Ó¼º À̸§°ú ¼Ó¼º°ªÀ» ¼³Á¤ÇÑ´Ù. void XmlNode::AddAttribute( const char* pName, const char* pValue )
<±âŸ Áß¿ä ¸Þ½îµå>
XmlNode¸¦ ¾îÅÂÄ¡Çϰųª µðÅÂÄ¡ ÇÒ ¼ö ÀÖ´Ù. XmlNode* XmlNode::AttachChild( XmlNode* pChild ) void XmlNode::DetachChild( XmlNode* pChild );
pName¿¡ ÇØ´çÇÏ´Â ¿¤¸®¸ÕÆ®¸¦ °Ë»öÇØ nodeArr ¹è¿¿¡ Ãß°¡ÇÑ´Ù. void XmlNode::FindNode( const char* pName, XmlNodeVector& nodeArr )
< XmlNodeÀÇ Àбâ, ÀúÀå, XmlNode »ý¼º>
XmlNode¸¦ ´Ù·ç´Â 3°¡Áö Àü¿ª ÇÔ¼ö°¡ ÀÖ´Ù.
XmlNode root¸¦ szNameÀ̶ó´Â À̸§À¸·Î Xml ÆÄÀÏÀ» ÀúÀåÇÑ´Ù. void WriteXml( const char* szName, XmlNode* root );
szName À̸§À» °¡Áø Xml ÆÄÀÏÀ» Àоî XmlNode*·Î ¸®ÅÏÇÑ´Ù. (XmlNode´Â ³ªÁß¿¡ delete ½ÃÄÑ Áà¾ßÇÑ´Ù.) XmlNode* ReadXml( const char* szName );
szNameÀ» ¿¤¸®¸ÕÆ® À̸§À¸·Î Á¤ÇÏ°í XmlNode¸¦ »ý¼ºÇÑ´Ù. XmlNode* CreateXmlNode( char* szName )
<¹®ÀÚ¿ º¯È¯ ÇÔ¼öµé>
bool, float, Vector2, Vector3, Vector4, Matrix¸¦ ¹®ÀÚ¿°ú »óÈ£ º¯È¯ ÇÒ ¼ö ÀÖ´Â ÇÔ¼ö ÀÌ´Ù. À̵é ÇÔ¼ö¸¦ »ç¿ëÇؼ XmlNodeÀÇ ¿¤¸®¸ÕÆ®, ¿¤¸®¸ÕÆ® ³»¿ë, ¼Ó¼ºÀ̸§, ¼Ó¼º°ªÀ» Æí¸®ÇÏ°Ô Ã³¸® ÇÒ ¼ö ÀÖ´Ù.
bool ToBool( const std::string& str );
std::string ToString( bool bFlag );
int ToInt( const std::string& str );
std::string ToString( int num );
float ToFloat( const std::string& str );
std::string ToString( float num );
base::Vector2 ToVector2( const std::string& str );
std::string ToString( const base::Vector2& vector );
base::Vector3 ToVector3( const std::string& str );
std::string ToString( const base::Vector3& vector );
base::Vector4 ToVector4( const std::string& str );
std::string ToString( const base::Vector4& vector );
base::Matrix ToMatrix( const std::string& str );
std::string ToString( const base::Matrix& mat );
|
<¿¹Á¦µé>
¾Æ·¡ ¿¹Á¦´Â 3d.xmlÀ» ÀÐ¾î¼ 3d_test.xml ÆÄÀÏ·Î ÀúÀåÇÑ´Ù.
XmlNode* pXmlNode = ReadXml( "3d.xml" );
WriteXml( "3d_test.xml", pXmlNode );
delete pXmlNode;
|
´ÙÀ½ ¿¹Á¦´Â bool, int, float, Vector2, Vetor3, Vector¸¦ ¿¤¸®¸ÓÆ®·Î ¸¸µé¾î 3d_type.xml ÆÄÀÏ·Î ÀúÀåÇÑ´Ù.
XmlNode* rootXmlNode = CreateXmlNode( "root" );
pXmlNode = new XmlNode;
pXmlNode->SetName( "bool" ).SetData( ToString( true ) );
bool bFlag = ToBool( *pXmlNode->GetData() );
rootXmlNode->AttachChild( pXmlNode );
pXmlNode = new XmlNode;
pXmlNode->SetName( "Int" ).SetData( ToString( 10 ) );
int num = ToInt( *pXmlNode->GetData() );
rootXmlNode->AttachChild( pXmlNode );
pXmlNode = new XmlNode;
pXmlNode->SetName( "Float" ).SetData( ToString( 10.7f ) );
float fnum = ToFloat( *pXmlNode->GetData() );
rootXmlNode->AttachChild( pXmlNode );
pXmlNode = new XmlNode;
pXmlNode->SetName( "Vector2" ).SetData( ToString( base::Vector2( 2.2f, 2.3f ) ) );
base::Vector2 vec2 = ToVector2( *pXmlNode->GetData() );
rootXmlNode->AttachChild( pXmlNode );
pXmlNode = new XmlNode;
pXmlNode->SetName( "Vector3" ).SetData( ToString( base::Vector3( 1.2f, 2.4f, 3.5f ) ) );
base::Vector3 vec = ToVector3( *pXmlNode->GetData() );
rootXmlNode->AttachChild( pXmlNode );
pXmlNode = new XmlNode;
pXmlNode->SetName( "Vector4" ).SetData( ToString( base::Vector4( 1.1f, 2.2f, 3.3f, 4.4f ) ) );
base::Vector4 vec4 = ToVector4( *pXmlNode->GetData() );
rootXmlNode->AttachChild( pXmlNode );
pXmlNode = new XmlNode;
base::Matrix mat;
mat.Init();
for( int i = 1; i <= 4; ++i )
for( int j = 1; j <= 4; ++j )
{
mat.m[i-1][j-1] = float(i*10 + j);
}
pXmlNode->SetName( "Matrix" ).SetData( ToString( mat ) );
base::Matrix mat1 = ToMatrix( *pXmlNode->GetData() );
rootXmlNode->AttachChild( pXmlNode );
WriteXml( "3d_type.xml", rootXmlNode );
delete rootXmlNode;
|
´ÙÀ½ÀÇ ¿¹Á¦´Â CreateXmlNode(), AttachChild(), AddAttribute(), FindNode()¸¦ »ç¿ëÇÑ ¿¹Á¦ÀÌ´Ù.
rootXmlNode = CreateXmlNode( "root" );
pXmlNode = CreateXmlNode( "Actor" );
rootXmlNode->AttachChild( pXmlNode );
pXmlNode->AddAttribute( "ö¼ö", "311" );
pXmlNode->AttachChild( CreateXmlNode( "model" ) )->AttachChild( CreateXmlNode( "Vector" ) )->
SetData( ToString(base::Vector3( 1.1f, 2.4f, 3.7f ) ) );
rootXmlNode->AttachChild( CreateXmlNode("Actor") )->
AttachChild( CreateXmlNode( "model" ) )->AttachChild( CreateXmlNode( "Vector" ) )->
SetData( ToString(base::Vector3( 1, 2, 3 ) ) );
XmlNodeVector nodeArr;
rootXmlNode->FindNode( "root/Actor/model/Vector", nodeArr );
if( nodeArr.empty() == false )
{
nodeArr[1]->AddAttribute( "type", "position" );
}
nodeArr.clear();
rootXmlNode->FindNode( "root/Actor/model/Vector", nodeArr );
if( nodeArr.empty() == false )
{
XmlNode* kXmlNode = nodeArr[0];
base::Vector3 vec= ToVector3( *kXmlNode->GetData() );
std::cout << "º¤ÅÍ Ãâ·Â" << std::endl;
}
WriteXml( "3d_math.xml", rootXmlNode );
delete rootXmlNode;
|
ÇÁ·ÎÁ§Æ®: TinyXmlTest1.zip
|