我在Xerces C++中使用SAX2,并希望在处理元素时获取XML Schema数据,以便知道它们在Schema中定义的类型。我该怎么做?
最佳答案
好吧,我知道了如何做到这一点。有关此主题的稀疏文档。显然,我需要将XMLReaderFactory::createXMLReader()返回的SAX2XMLReader强制转换为SAX2XMLReaderImpl。然后,我可以在该接口(interface)上注册PSVIHandler实现。我必须提供自己的PSVIHandler实现,因为在Xerces中找不到默认实现。
一旦向SAX2XMLReaderImpl注册了PSVI的此实现,我便创建一个ContentHandler impl,并将PSVI处理程序impl传递给其构造函数。然后,我向SAX2XMLReaderImpl注册ContentHandler。然后在解析时,我可以从PSVIHandler访问信息以获取与架构相关的信息。
一切看起来都很笨拙,而PSVIHandler接口(interface)似乎非常不友好。也许有更好的方法。
这是一个代码片段:
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);
关于c++ - 从Xerces获取模式数据类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3858889/