slean

 

RapidXML 试用

  近半年来断断续续的封装一些SDK,在兼顾跨平台、易用性和高效率上还要顾及到对外dll的大小问题。由于之前解析SVG文件的用到了一个XML解析库xercesc,这个DLL实在巨大近4M,于是尝试用新的XML解析库替代它,查阅各种blog对比优缺点后,决定试用RapidXML,这个号称史上最快的解析库。感觉上手很容易、网上也有许多文档例子。

深度遍历SVG文件:

//解析
        file<TCHAR> fdoc(lpszFile);  
        xml_document<TCHAR>   doc;  
        doc.parse<0>(fdoc.data()); 
        
        //! 获取根节点   
        xml_node<TCHAR>* root = doc.first_node();  
        //! 获取根节点第一个节点   
        std::vector<xml_node<TCHAR>* > vNode;
        xml_node<TCHAR> * node = doc.first_node();
        
        std::vector<xml_node<TCHAR>* > vParentNode;

        while (node )
        {
            vNode.push_back(node);
            if(node->first_node() == NULL)
            {
                if (node->next_sibling() == NULL)
                {
                    node = vParentNode.back();
                    node = node->next_sibling();

                    vParentNode.pop_back();
                    while (node == NULL && !vParentNode.empty())
                    {
                        node = vParentNode.back();
                        node = node->next_sibling();
                        vParentNode.pop_back();
                    }                    
                }
                else
                {
                    node = node->next_sibling();
                }
            }
            else
            {
                vParentNode.push_back(node);
                node = node->first_node();
            }
        }

然后就用VNode解析具体内容了。

 

posted on 2014-01-26 17:02  slean  阅读(384)  评论(0编辑  收藏  举报

导航