我在使用sax解析器时遇到了(我认为是)一种奇怪的行为,我想知道它是否正常.
我通过SAX解析器发送这个XML:
<site url="http://example.com/?a=b&b=c"; />
Run Code Online (Sandbox Code Playgroud)
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&b=c\" />";
xmlSAXUserParseMemory( handler,
NULL,
xml,
strlen(xml)
);
}
Run Code Online (Sandbox Code Playgroud)
PS:这条消息实际上是从LibXML2列表中提取的......我不是这封邮件的最初作者,但我注意到使用Nokogiri和Aaron(Nokogiri的维护者)的问题实际上是自己发布了这条消息.
请求解析器替换实体值
这意味着当您设置上下文时,请设置如下选项:
xmlParserCtxtPtr context = xmlCreatePushParserCtxt(&yourSAXHandlerStruct, self, NULL, 0, NULL);
xmlCtxtUseOptions(context, XML_PARSE_NOENT);
Run Code Online (Sandbox Code Playgroud)