2

Xerces C ++でSAX2を使用しており、スキーマで定義されているタイプがわかるように、要素を処理しながらXMLスキーマデータを取得したいと考えています。どうすればこれを達成できますか?

4

1 に答える 1

1

さて、私はこれを行う方法を理解しました。主題に関して利用可能なまばらなドキュメント。どうやら、XMLReaderFactory :: createXMLReader()が返すSAX2XMLReaderをSAX2XMLReaderImplにキャストする必要があるようです。次に、そのインターフェイスにPSVIHandler実装を登録できます。Xerces内にデフォルトの実装が見つからなかったため、PSVIHandlerの独自の実装を提供する必要があります。

PSVIのこの実装がSAX2XMLReaderImplに登録されたら、ContentHandler implを作成し、PSVIハンドラーimplをそのコンストラクターに渡します。次に、ContentHandlerをSAX2XMLReaderImplに登録します。次に、解析中に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 に答える