2017-07-20 14 views
0

のは、私は次のXML持っていると仮定しましょう:libxml2でパスの属性値を取得しますか?

<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」 私は次のように取得したいの答えとして、「数量= 80 " どうすればこれを稼ぐことができますか?私は次の関数でそれを作りたい:

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

ptr_node_Parentは私のルート(カタログ)で、ptr_srcは(「CD2.MYPLAYLIST1.pop」)

唯一の私の文字列であるI可能性があります:

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関数はありますか? が問題を再考した後 メイト

答えて

0

、事前にありがとう、私は次のコードでそれを解決することができます:

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 

}

関連する問題