我在Xerces C ++中使用SAX2,并希望在处理元素时获取XML Schema数据,以便我知道它们在Schema中定义的类型。我怎么能做到这一点?
答案 0 :(得分:1)
好的,我想出了如何做到这一点。关于该主题的稀疏文档。显然我需要将XMLReaderFactory :: createXMLReader()返回的SAX2XMLReader转换为SAX2XMLReaderImpl。然后我可以在该接口上注册PSVIHandler实现。我必须提供自己的PSVIHandler实现,因为我在Xerces中找不到默认实现。
一旦用SAX2XMLReaderImpl注册了PSVI的这个实现,我就创建了一个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);