2

I am using SAX2 in Xerces C++ and would like to get XML Schema data while I handle elements so that I know their type defined in the Schema. How can I accomplish this?

4

1 回答 1

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);
于 2010-10-11T16:13:28.120 回答