pugixml错误解析文档c ++

时间:2014-02-13 13:09:39

标签: c++ xml parsing pugixml

我从网站上加载了一个xml文档。 然后我尝试用pugixml解析它。

  ParseXml::parseTrainsXml(char source[]) {    
  __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [ %s ]", source);
  size_t size = sizeof(source);

  pugi::xml_document doc;

  pugi::xml_parse_result result = doc.load_buffer(source, size);

  __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [ %s ]",
                result.description());
}

当我尝试加载它时,我收到以下错误:“解析文档声明/处理指令时出错”。所以这并没有给我很多帮助,所以我试着查一查。 http://pugixml.googlecode.com/svn/tags/latest/docs/manual/loading.html

status_bad_pi表示由于不正确的文档声明/处理指令而停止解析

所以基本上,我不知道它为什么不起作用。当我声明相同的xml时:

const char source[] = "my xml here";

如果我这样声明它确实有效。谁知道什么可能出错?

1 个答案:

答案 0 :(得分:1)

  size_t size = sizeof(source);

此行不正确。 source被视为指向char的指针,因此sizeof始终为4(或8)=>你只得到解析的前4/8字节。由于您将不完整的缓冲区传递给pugixml(可能是“<?xm”),因此pugixml将其标记为不正确。

您必须将正确的缓冲区大小传递给您的函数,或者,如果保证缓冲区为空终止(不确定如何获取缓冲区),则可以使用doc.load(source)而不是doc。 load_buffer(来源,大小)。