LibXML2 Sax解析和&符号

时间:2009-06-11 18:09:28

标签: escaping libxml2

我在使用sax解析器时遇到(我认为是)一种奇怪的行为,我想知道它是否正常。

我通过SAX解析器发送此XML:

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

“&amp;”转换为“&amp;”当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的维护者)实际上自己发布了这条消息。

1 个答案:

答案 0 :(得分:5)

message描述了同样的问题(我也有)和the response

  

要求解析器替换实体值

这意味着当您设置上下文时,请设置如下选项:

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