从Xerces获取架构数据类型

时间:2010-10-04 20:32:26

标签: c++ schema xerces

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

1 个答案:

答案 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);