2009-06-11 149 views
4

我遇到過(我認爲是)使用sax解析器時的一個奇怪行爲,我想知道它是否正常。LibXML2 Sax解析和符號

我通過SAX解析器發送此XML:

<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 list提取...我不是這個郵件的最初作者,但我注意到了問題使用NokogiriAaron(Nokogiri的維護者)實際上自己發佈了這條消息。

回答

5

message描述了同樣的問題(我不得不爲好)和the response說要

要求,以取代實體解析器值

它的意思是,當你設置你的上下文,設置這樣的選項:

xmlParserCtxtPtr context = xmlCreatePushParserCtxt(&yourSAXHandlerStruct, self, NULL, 0, NULL); 
xmlCtxtUseOptions(context, XML_PARSE_NOENT);