LibXML2 Sax解析和&符号

6

我在使用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列表中提取的...我不是这封邮件的最初作者,但我使用Nokogiri发现了问题,Aaron(Nokogiri的维护者)事实上发布了这条消息。

1个回答

5
这个消息描述了相同的问题(我也遇到过),回复中说:

请求解析器替换实体值

这意味着在设置上下文时,应该这样设置选项:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接