Как я могу сравнить имя узла 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. Как я могу сравнить имя узла с 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