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