首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xerces-c SaxParser问题

Xerces-c SaxParser问题
EN

Stack Overflow用户
提问于 2015-11-27 11:15:03
回答 1查看 561关注 0票数 0

我正在使用xerces-c解析一个XML文件,但是我得到了一些奇怪的结果。

我创建自己的DocumentHandler (从HandlerBase派生)并覆盖:

代码语言:javascript
复制
void characters(const XMLCh* const chars, const unsigned int length);

这样,我就可以接收元素中字符数据的通知。

为了解析一个文件,我创建了一个解析器,创建了一个输入缓冲区,创建了我的处理程序,并调用了解析。

代码语言:javascript
复制
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([...])的调用,一个调用数据为“值”,另一个调用(或多个),其中的数据类似于“类似于”的“类似的”

xml文件本身不包含这些字符。虽然这是我第一次使用LocalFileInputSource (我通常使用MemBufInputSource),但我有用户xerces-c来像这样多次解析XML,没有任何问题。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-10 08:25:40

我对SAX2XMLReader也有类似的问题。我理解的是,在使用SAX解析器时,开发人员在解析时应该知道他在XML结构中的位置。

这些对字符()的后续调用可能用于文件中的其他标记或可忽略的空格。

根据数据的长度,还可能为同一个标记多次调用回调字符。这取决于您连接您在每个电话中接收到的数据。

因此,我要做的是用回调函数startElement()和endElement()检测标记endElement的开始和结束。这样,一旦收到标记的endElement(),就可以放弃对字符()的后续调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33956165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档