我在我的C++程序中使用了xerces 3。 我想要一个人来指导我如何在sax解析中的开始和结束标记之间提取文本。 例如,假设我们有:如何在sax解析中获取xml标签中的文本
<?xml version="1.0"?>
<catalog>
<book id="123">
<author>Introduction to algorithm </author>
</book>
</catalog>
如何访问这样的文字:“介绍的算法”
我在我的C++程序中使用了xerces 3。 我想要一个人来指导我如何在sax解析中的开始和结束标记之间提取文本。 例如,假设我们有:如何在sax解析中获取xml标签中的文本
<?xml version="1.0"?>
<catalog>
<book id="123">
<author>Introduction to algorithm </author>
</book>
</catalog>
如何访问这样的文字:“介绍的算法”
如果我没记错,你写你自己的处理程序从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
);
发现差异?使你自己的版本的签名匹配头文件,它会工作。
是的,这是正确的,我们应该使用characters()方法!但我的字符方法永远不会被解析 –
我应该注册一些关于它? –
@paradisalprogrammer不知道你是否仍然在这里,但我把我自己的例子放在一起,并找出为什么我的'characters()'函数没有被调用。现在添加更新到我的答案。 – BoBTFish
在您的方法中使用override关键字。这可能会帮助你一点点
向我们展示你到目前为止(简单,不是一个巨大的程序),它可能是一件简单的添加。 – BoBTFish
我的问题很简单!我想读取xml标签之间的文本 –
如果它非常简单,您可以自己做...我写了一些模糊的想法作为答案,但我无法提供任何示例代码没有启动点(即我不会为你写整个程序)。 – BoBTFish