escaping - LibXML2 Sax 解析和 & 符号

标签 escaping 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中提取的...我不是这封邮件的最初作者,但我注意到使用 Nokogiri 的问题和 Aaron (Nokogiri 的维护者)实际上是自己发布了这条消息。

最佳答案

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

ask the parser to replace entities values



这意味着当您设置上下文时,请设置如下选项:
xmlParserCtxtPtr context = xmlCreatePushParserCtxt(&yourSAXHandlerStruct, self, NULL, 0, NULL);
xmlCtxtUseOptions(context, XML_PARSE_NOENT);

关于escaping - LibXML2 Sax 解析和 & 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/982716/

相关文章:

ruby - gsub 中的反斜杠(转义和反向引用)

Java:printf 语句中的文字百分号

stream - 如何使用libxml2解析来自GInputStream(GLibGIO/GVFS)的数据?

c - 如何在c中使用libxml2根据属性对xml文件进行分类

python - xml.etree.ElementTree 模块是否有等效项?

postgresql - 在haskell中用单反斜杠替换双反斜杠

xml - Groovy 中的 UnEscape Xml

c - 将西里尔字符写入 xml 文件

c++ - Ubuntu Eclipse libxml2 错误 : fatal error: libxml/xmlversion. h: No such file or directory

php - 不要在表单提交时转义特殊字符