xcode 中libxml2 解析xml文件

调用:

 POINT *p;

    p->x = 350;

    p->y = 0;

    SpriterXNode * spxn=newSpriterXNode();//注:这里一定要new spriterXNode() 才能对spriterXNode的全局对象分配存储空间  不然spriterXNode中的全局对象在赋值时会报错

Thread1:EXC_BAD_ACCESS

    spxn->spriterNodeWithFiles("monster.SCML","monster.png", 0.5,*p);


逻辑操作:

void SpriterXNode::spriterNodeWithFiles(std::string scmFile,std::string spriteSheet, double sdScale, POINT offset)

{

    this->initNodeWithFiles(scmFile, spriteSheet, sdScale, offset);

}

void SpriterXNode::spriterNodeWithFiles(std::string scmFile,std::string spriteSheet)

{

    POINT p;

    p.x =0;

    p.y =0;

    this->spriterNodeWithFiles(scmFile, spriteSheet,0.5, p);

}

//读取所有的node以及node对应的属性

void SpriterXNode::initNodeWithFiles(std::string scmFile,std::string spriteSheet, double sdScale, POINT offset)

{

    

    xmlDocPtr doc;

    xmlNodePtr curNode;

    xmlKeepBlanksDefault (0); 

//    CCLOG(@"");

//        cocos2d::CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(scmFile.c_str());

//    f->fullPathFromRelativePath(scmFile.c_str());

    doc = xmlReadFile(cocos2d::CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(scmFile.c_str()),"UTF-8",XML_PARSE_RECOVER);

    if(NULL == doc){

        fprintf(stderr,"Document not parsed successflly");

        return ;

    }

    curNode = xmlDocGetRootElement(doc);

//    _configRoot->name = *curNode->name; 

    xmlAttrPtr mAttr = curNode->properties;

    std::map<xmlChar*,xmlChar*> attrimap;

    while (mAttr!=NULL) {

        xmlChar * attr = xmlGetProp(curNode,BAD_CAST(mAttr->name));

//        attrimap->insert(std::map<xmlChar, xmlChar*>::value_type(*mAttr->name,attr));

//        attrimap.insert(std::pair<xmlChar*,xmlChar*>(BAD_CAST(mAttr->name),attr));

        std::cout<<mAttr->name<<"-----"<<attr<<endl;

        xmlFreeProp(mAttr);

        mAttr = mAttr->next

    }

//    _configRoot->properties = attrimap;

//    std::list<SpriterXConfigNode *> children = *newstd::list<SpriterXConfigNode *>();


//   this->_configRoot =new SpriterXConfigNode();

//   _configRoot->configNode(*curNode->name,NULL, children, attrimap, NULL);

//    SpriterXConfigNode * root = new SpriterXConfigNode(*curNode->name, NULL, children, attrimap, NULL);

    std::map<xmlChar*,xmlChar*>::iterator it;

    for (it =_attrimap.begin(); it!=_attrimap.end(); it++) {

       std::cout<<"key:"<<it->first<<"---value:"<<it->second<<endl;

    }

    if(NULL == curNode){

        fprintf(stderr,"empty document");

        xmlFreeDoc(doc);

        return ;

    }

    if(xmlStrcmp(curNode->name,BAD_CAST"spriter_data")){

        fprintf(stderr,"document of the wrong type,root node != spriter_data");

        xmlFreeDoc(doc);

        return ;

    }

//    this->saveAllNodeAndAttribute(doc,curNode);

}


void SpriterXNode::saveAllNodeAndAttribute(xmlDocPtr doc,xmlNodePtr curNode){

    traversingNode(curNode);

}

//递归遍历xml中的node

void SpriterXNode::traversingNode(xmlNodePtr curNode){

    xmlNodePtr children;

    children = curNode->xmlChildrenNode;

    while (children!=NULL) {

        std::cout<<children->name<<endl;

        xmlAttrPtr mAttr = curNode->properties;

        //    std::map<xmlChar,xmlAttrPtr> *attrimap;

        while (mAttr!=NULL) {

            //        attrimap->insert(std::map<xmlChar, xmlAttrPtr>::value_type(*mAttr->name,mAttr));

            xmlChar * attr = xmlGetProp(curNode, BAD_CAST(mAttr->name));

            std::cout<<mAttr->name<<"-----"<<attr<<endl;

            mAttr = mAttr->next;

        } 

        traversingNode(children);

        children = children->next;

    } 

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值