2009-06-11 73 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);