XML Exporter: 노드 저장

XML 포맷으로 노드를 저장해 보자.
TinyXML 라이브러리 이외에 XmlNode.h, XmlNode.cpp, StringUtil.h, StringUtil.cpp를 추가한다.
XmlNode를 이용해서 XML을 저장한다.

void Export::CollectINode( INode* pNode )
재귀 호출로 INode를 std::vector<INode*> m_listINode에 저장한다.

맥스의 노드 구조는 씬 구조로 되어 있다. 트리구조를 재귀 호출로 들어가면서 벡터에 저장한다.
맥스의 구조를 위한 코드이지 XML을 저장하기 위해 실제로 사용되지는 않을 것이다.

void Export::CollectINode( INode* pNode )

{

    if(!pNode)

        return;

 

    m_listINode.push_back(pNode);

 

    int iChild = pNode->NumberOfChildren();

 

    for(int i=0; i<iChild; ++i)

    {

        INode* pChild = pNode->GetChildNode(i);

 

        if(pChild)

            CollectINode(pChild);

    }

}

씬 구조를 XML로 저장하기 위해 XmlNode 클래스를 사용 할것이다.
씬구조를 XmlNode 클래스로 변환 하는 메쏘드는 CollectINode()이다.

void Export::CollectINode( INode* pNode, XmlNode* pParentXML )

{

    if(!pNode)

        return;

 

    XmlNode* pXmlNode = CreateXmlNode( pNode->GetName() );

    if( m_pXmlRoot == NULL )

        pParentXML = m_pXmlRoot = pXmlNode;

    else

        pParentXML->AttachChild( pXmlNode );

 

    int iChild = pNode->NumberOfChildren();

    for(int i=0; i<iChild; ++i)

    {

        INode* pChild = pNode->GetChildNode(i);

 

        if(pChild)

            CollectINode(pChild, pXmlNode );

    }

}

m_pXmlRoot 노드가 NULL 값이면 루트 노드를 셋팅한다. INode와 구조로 XmlNode를 구성한다.
이렇게 구성한 노드는 ExportXMl() 로 저장한다.

bool Export::ExportXML( const char* szFileName )

{

    WriteXml( szFileName, m_pXmlRoot );

    return true;

}

소스: maxProject_xmlnode.zip