如何在sax解析中获取xml标记中的文本

时间:2012-11-22 11:30:08

标签: c++ sax xerces

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

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

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

3 个答案:

答案 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关键字。这可能对你有所帮助