2010-10-04 102 views
1

我在Xerces C++中使用SAX2,并希望在处理元素时获取XML模式数据,以便我知道它们在模式中定义的类型。我怎样才能做到这一点?从Xerces获取模式数据类型

回答

1

好吧,我想出了如何做到这一点。有关该主题的稀疏文档。显然我需要将XMLReaderFactory :: createXMLReader()返回的SAX2XMLReader强制转换为SAX2XMLReaderImpl。然后我可以在该接口上注册一个PSVIHandler实现。我必须提供自己的PSVIHandler实现,因为我在Xerces中找不到默认实现。

一旦PSVI的这个实现被注册到SAX2XMLReaderImpl中,我就创建一个ContentHandler impl并将PSVI处理程序impl传递给它的构造函数。然后我用SAX2XMLReaderImpl注册ContentHandler。然后,当我解析时,我可以从PSVIHandler获取信息以获取与架构相关的信息。

这一切都显得非常笨拙,PSVIHandler界面看起来非常不友善。也许有更好的方法。

下面的代码片段:

SAX2XMLReaderImpl* parser = dynamic_cast<SAX2XMLReaderImpl*>(XMLReaderFactory::createXMLReader()); 
    PSVIHandler* pSchemaHandler = new MyPSVIHandler(); 
    DefaultHandler* defaultHandler = new MyXMLHandler(pSchemaHandler); 
    parser->setContentHandler(defaultHandler); 
    parser->setErrorHandler(defaultHandler); 
    parser->setPSVIHandler(pSchemaHandler);