【发布时间】:2015-11-27 11:15:03
【问题描述】:
我正在使用 xerces-c 解析 XML 文件,但得到一些奇怪的结果。
我创建自己的 DocumentHandler(从 HandlerBase 派生)并覆盖:
void characters(const XMLCh* const chars, const unsigned int length);
这样我会收到元素内字符数据的通知。
为了解析文件,我创建了一个解析器,创建了一个输入缓冲区,创建了我的处理程序并调用了 parse。
SAXParser* lp_parser = new SAXParser();
XMLCh* lp_fileName = XMLString::transcode("myfile.xml");
LocalFileInputSource l_fileBuf(lp_fileName);
XMLString::release(&lp_fileName);
MyHandler l_handler;
lp_parser->setDocumentHandler((DocumentHandler *)&l_handler);
lp_parser->parse(l_fileBuf);
delete lp_parser;
问题在于 characters([...]) 不仅被调用字符数据,而且(有时多次)每个标签被调用,给我一组空格和一个换行符作为字符数据。
即<Tag>Value</Tag> 产生两个对 characters([...]) 的调用,一个是数据是“值”,另一个是(或多个)数据类似于“ \n ”
xml 文件本身不包含这些字符。我让用户 xerces-c 像这样多次解析 XML 没有任何问题,尽管这是我第一次使用 LocalFileInputSource(我通常使用 MemBufInputSource)。
有什么想法吗?
【问题讨论】:
-
看起来解析器正在给我提供“可忽略的空白”,但到目前为止我一直无法找到如何阻止它。我发现的一个建议是“验证解析器”不会将这些发送到“字符([...])”,而是发送到“ignorableWhitespace([...])”,但到目前为止我还没有让它工作。