LibXML2 Sax Парсинг и амперсанд

Я столкнулся (как я думаю, с) странным поведением при использовании синтаксического анализатора саксофона, и я хотел знать, нормально ли это.

Я отправляю этот XML через парсер SAX:

<site url="http://example.com/?a=b&amp;b=c"; />

«&» Преобразуется в «&», когдаstartElement обратный вызов называется. Это должно сделать это? Если это так, я хотел бы понять, почему.

Я вставил пример, демонстрирующий проблему здесь:

#include <stdlib.h>
#include <libxml/parser.h>

static void start_element(void * ctx, const xmlChar *name, const xmlChar **atts)
{
  int i = 0;
  while(atts[i] != NULL) {
    printf("%s\n", atts[i]);
    i++;
  }
}

int main(int argc, char *argv[]) {
  xmlSAXHandlerPtr handler = calloc(1, sizeof(xmlSAXHandler));
  handler->startElement = start_element;

  char * xml = "<site url=\"http://example.com/?a=b&amp;b=c\" />";

  xmlSAXUserParseMemory( handler,
                          NULL,
                          xml,
                          strlen(xml)
  );
}

PS: это сообщение фактически извлечено изСписок LibXML2... и я не являюсь первоначальным автором этого письма, но я заметил проблему с использованиемNokogiri а такжеАарон (сопровождающий Nokogiri) фактически отправил это сообщение сам.

Ответы на вопрос(1)

Ваш ответ на вопрос