1
我在Xerces C++中使用SAX2,並希望在處理元素時獲取XML模式數據,以便我知道它們在模式中定義的類型。我怎樣才能做到這一點?從Xerces獲取模式數據類型
我在Xerces C++中使用SAX2,並希望在處理元素時獲取XML模式數據,以便我知道它們在模式中定義的類型。我怎樣才能做到這一點?從Xerces獲取模式數據類型
好吧,我想出瞭如何做到這一點。有關該主題的稀疏文檔。顯然我需要將XMLReaderFactory :: createXMLReader()返回的SAX2XMLReader強制轉換爲SAX2XMLReaderImpl。然後我可以在該接口上註冊一個PSVIHandler實現。我必須提供自己的PSVIHandler實現,因爲我在Xerces中找不到默認實現。
一旦PSVI的這個實現被註冊到SAX2XMLReaderImpl中,我就創建一個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);