我在我的c ++程序中使用xerces 3。 我想要一些人来指导我,如何在sax解析中的开始和结束标记之间提取文本。 例如,假设我们有:
<?xml version="1.0"?>
<catalog>
<book id="123">
<author>Introduction to algorithm </author>
</book>
</catalog>
如何访问此文本:'算法简介'
答案 0 :(得分:2)
你应该可以使用:
void HandlerBase::characters ( const XMLCh *const chars,
const XMLSize_t length
)
请注意,这可能会被多次调用。
答案 1 :(得分:1)
如果我没记错的话,你可以自己编写继承自HandlerBase
的处理程序。 startElement()
将调用<author>
,然后endElement()
将调用</author>
。中间的所有文本都会传递给characters()
,因此您需要知道自己何时进入<author></author>
,并利用此功能将字符保存到characters()
函数中的有用位置:http://xerces.apache.org/xerces-c/apiDocs-3/classHandlerBase.html
当我这样做(一段时间以前)时,我只是作弊并将所有内容作为属性传递给startElement()
并节省了大量麻烦。
编辑:我做了我自己的例子并遇到了同样的问题(你在问题中没有很好地描述,如果你提供你的代码,顺便说一下也会更容易解决)。 看看documentation(注意我在检查哪个版本时不小心,但仍然):
virtual void characters (const XMLCh *const chars, const XMLSize_t length)
然后检查实际的头文件。
virtual void characters
(
const XMLCh* const chars
, const unsigned int length
);
发现差异?使您自己的版本的签名与头文件匹配,它将起作用。
答案 2 :(得分:-1)
在您的方法中使用override关键字。这可能对你有所帮助