1

我已经从网站加载了一个 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";

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

4

1 回答 1

1
  size_t size = sizeof(source);

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

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

于 2014-02-13T15:44:20.720 回答