Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 验证不使用';不要使用Xerces定义模式_C++_Xml_Xsd_Xerces - Fatal编程技术网

C++ 验证不使用';不要使用Xerces定义模式

C++ 验证不使用';不要使用Xerces定义模式,c++,xml,xsd,xerces,C++,Xml,Xsd,Xerces,我正在使用Xerces-C++(版本2.6.1)SAX2解析器来验证XML,如下面的文档。(这是MSML—中定义的媒体服务器标记语言。) 经过反复尝试,我终于发现了问题所在。验证错误报告给传递给解析器的ErrorHandler上的error回调。schemaLocation属性没有问题 解决了这个问题,并添加了XML语法缓存以提高性能,代码如下所示 SAX2XMLReader* parser = XMLReaderFactory::createXMLReader(); // Enable th

我正在使用Xerces-C++(版本2.6.1)SAX2解析器来验证XML,如下面的文档。(这是MSML—中定义的媒体服务器标记语言。)


经过反复尝试,我终于发现了问题所在。验证错误报告给传递给解析器的
ErrorHandler
上的
error
回调。
schemaLocation
属性没有问题

解决了这个问题,并添加了XML语法缓存以提高性能,代码如下所示

SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();

// Enable the parser's schema support 
parser->setFeature(XMLUni::fgXercesSchema, true);

// Schema validation requires namespace processing to be turned on.
parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true);

// Cache the XML grammar and use it for subsequent parses.
mParser->setFeature(XMLUni::fgXercesCacheGrammarFromParse, true);
mParser->setFeature(XMLUni::fgXercesUseCachedGrammarInParse, true);

// Define the location of the MSML schema.
XMLCh* schemaLocation = XMLString::transcode("/directory/path/msml-core.xsd");
parser->setProperty(XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation,
                    schemaLocation);

// MSMLHandler is defined elsewhere and inherits from xercesc/sax2/DefaultHandler
// It overrides startElement, fatalError *and error*.
MxMSMLHandler* msmlHandler = new MSMLHandler(xiSessionID, xoMSMLResponse);
parser->setContentHandler((ContentHandler*) msmlHandler);
parser->setErrorHandler((ErrorHandler*) msmlHandler);

// Do the parse
parser->parse(*xmlInputSource);
SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();

// Enable the parser's schema support 
parser->setFeature(XMLUni::fgXercesSchema, true);

// Schema validation requires namespace processing to be turned on.
parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true);

// Define the location of the MSML schema.
XMLCh* schemaLocation = XMLString::transcode("/directory/path/msml-core.xsd");
parser->setProperty(XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation,
                    schemaLocation);

// MSMLHandler is defined elsewhere and inherits from xercesc/sax2/DefaultHandler
// It overrides startElement and fatalError.
MxMSMLHandler* msmlHandler = new MSMLHandler(xiSessionID, xoMSMLResponse);
parser->setContentHandler((ContentHandler*) msmlHandler);
parser->setErrorHandler((ErrorHandler*) msmlHandler);

// Do the parse
parser->parse(*xmlInputSource);
SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();

// Enable the parser's schema support 
parser->setFeature(XMLUni::fgXercesSchema, true);

// Schema validation requires namespace processing to be turned on.
parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true);

// Cache the XML grammar and use it for subsequent parses.
mParser->setFeature(XMLUni::fgXercesCacheGrammarFromParse, true);
mParser->setFeature(XMLUni::fgXercesUseCachedGrammarInParse, true);

// Define the location of the MSML schema.
XMLCh* schemaLocation = XMLString::transcode("/directory/path/msml-core.xsd");
parser->setProperty(XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation,
                    schemaLocation);

// MSMLHandler is defined elsewhere and inherits from xercesc/sax2/DefaultHandler
// It overrides startElement, fatalError *and error*.
MxMSMLHandler* msmlHandler = new MSMLHandler(xiSessionID, xoMSMLResponse);
parser->setContentHandler((ContentHandler*) msmlHandler);
parser->setErrorHandler((ErrorHandler*) msmlHandler);

// Do the parse
parser->parse(*xmlInputSource);