繁体   English   中英

使用libxml2通过路径获取属性值?

[英]Get attribute value by path with libxml2?

假设我有以下xml:

 <CATALOG>
    <CD name="CD1">
        <music name="MYPLAYLIST1">
            <style styleName="rock" quantity="120"></style>
            <style styleName="pop" quantity="20"></style>
        </music>
    </CD>
    <CD name="CD2">
        <music name="MYPLAYLIST1">
            <style styleName="rock" quantity="80"></style>
            <style styleName="pop" quantity="80"></style>
        </music>
        <music name="MYPLAYLIST2">
            <style styleName="reggae" ></style>
            <style styleName="rap"></style>
        </music>
    </CD>
</CATALOG>

我想给函数提供以下参数:“ CD2.MYPLAYLIST1.pop”作为答案,我想得到以下内容:“ quantity = 80”我怎么能赚到这个? 我想通过以下功能实现它:

void fv_v_getAttr(xmlNode *ptr_Node_Parent,char* ptr_src){
...
}

其中ptr_node_Parent是我的根目录(CATALOG),而ptr_src是我的字符串(“ CD2.MYPLAYLIST1.pop”)

我唯一能做的是:

void fv_v_getAttr(xmlNode *ptr_Node_Parent,char* ptr_src){
    char *ptr_help = strdup(ptr_src);
    ptr_src=strtok(ptr_help,".");

    printf("\CD name:%s\n",ptr_src);
    ptr_src=strtok(NULL,".");
    printf("music name:%s\n", ptr_src);
    ptr_src=strtok(NULL,".");
    printf("stylename:%s\n", ptr_src);;

}

我需要检查整个树还是为此有任何libxml2函数? 预先谢谢你,伴侣

重新考虑问题后,我可以使用以下代码解决它:

void fv_v_getAttr(xmlNode *ptr_Node_Parent,char* ptr_src){
char *ptr_help = strdup(ptr_src);
xmlNode *ptr_Node_Child = ptr_Node_Parent->children;     
ptr_src=strtok(ptr_help,".");                          

while(ptr_Node_Child){
    xmlAttr *ptr_Attr = ptr_Node_Child->properties;
    if( (ptr_Node_Child->type == XML_ELEMENT_NODE) && (strcmp(xmlGetProp(ptr_Node_Child,ptr_Attr->name),ptr_src) == NULL )){ 
        ptr_Node_Child = ptr_Node_Child->children;         
        ptr_src=strtok(NULL,".");                          
        while(ptr_Node_Child){
            ptr_Attr = ptr_Node_Child->properties;
            if((ptr_Node_Child->type == XML_ELEMENT_NODE) && (strcmp(xmlGetProp(ptr_Node_Child,ptr_Attr->name),ptr_src) == NULL )){ 
                ptr_Node_Child= ptr_Node_Child->children;  
                ptr_src=strtok(NULL,".");    
                while(ptr_Node_Child){
                    ptr_Attr = ptr_Node_Child->properties;
                    xmlAttr *attr_name = ptr_Node_Child->properties;     
                    if((ptr_Node_Child->type == XML_ELEMENT_NODE) && (strcmp(xmlGetProp(ptr_Node_Child,ptr_Attr->name),ptr_src) == NULL )) {
                        attr_name=attr_name->next;                                                        
                        printf("\n%s=%s\n", attr_name->name, xmlGetProp(ptr_Node_Child,attr_name->name)); 
                        ptr_Node_Child = ptr_Node_Child->next;
                    } 
                    else{
                       ptr_Node_Child = ptr_Node_Child->next;
                    }
                }//endWhile
            } 
            else{
                ptr_Node_Child=ptr_Node_Child->next;
            }
        }//endWhile
    }
    else{
        ptr_Node_Child = ptr_Node_Child->next;
    }
}//endWhile  

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM