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