3

我在我的 c++ 程序中使用 xerces 3。我想有人指导我,如何在 sax 解析中提取开始和结束标记之间的文本。例如,假设我们有:

<?xml version="1.0"?>
<catalog>
   <book id="123">
      <author>Introduction to algorithm </author>
    </book>
</catalog>

如何访问此文本:“算法简介”

4

3 回答 3

2

您应该能够使用:

void HandlerBase::characters    (   const XMLCh *const      chars,
    const XMLSize_t     length   
)   

请注意,这可能会被多次调用。

于 2012-11-22T15:35:22.610 回答
1

如果我没记错的话,您编写自己的处理程序,继承自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
);

指出不同?使您自己的版本的签名与头文件匹配,它将起作用。

于 2012-11-22T11:50:23.603 回答
-1

在您的方法中使用 override 关键字。这可能对您有所帮助

于 2014-02-23T21:54:26.580 回答