Как мога да сравня името на възел libxml2?

Използвам g++ и libxml2

static void print_element_names(xmlNode * a_node,xmlDoc * doc) {               
  xmlNode *cur_node = NULL;
  const char *c= "city";
  xmlChar *name;

  for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
    if (cur_node->type == XML_ELEMENT_NODE) {
      std::cout<<convert(cur_node)<<std::endl;
    }

    if (convert(cur_node)==c){
      //work but not equal with city
      std::cout<<"Found node"<<std::endl;
    }
    print_element_names(cur_node->children,doc);
  }
}

char * convert(xmlNode * a_node) {
  char* a = (char *)a_node->name;
  return a;
}

резултатът е

адресна_книга

човек

име

адрес

улица

град

състояние

цип

телефон


Не е равно на "град" може би защото xmlChar и char. Как мога да сравня nodename с char?


person Kawin    schedule 25.12.2012    source източник


Отговори (1)


Вашият convert(cur_node)==c сравнява указатели, вместо да сравнява съдържанието на низове, което не е начинът за сравняване на низове в C++.

Опитайте да използвате strncmp, за да сравните двете.

http://www.cplusplus.com/reference/cstring/strncmp/

person Jason Viers    schedule 27.12.2012