Xerces-C++ (버전 2.6.1) SAX2 파서를 사용하여 아래 문서와 같은 XML의 유효성을 검사합니다.Xerces를 사용하여 스키마를 정의하지 않는 XML 유효성 확인
<?xml version="1.0" encoding="UTF-8"?>
<msml version="1.1">
<createconference name="example">
<audiomix>
<n-loudest n="3"/>
<asn ri="10s"/>
</audiomix>
</createconference>
</msml>
이 RFC는 XML schemas for validating MSML을 제공하고, 나는 MSML을 확인하고 분석하기 위해 Xerces에 SAX2 파서와 함께이를 사용하려고 해요 - (RFC 5707에 정의 된 미디어 서버 마크 업 언어.이 MSML이다). 구문 분석은 정상적으로 작동하지만 유효성을 검사하지는 않습니다. 유효성을 검사하려는 MSML에 schemaLocation
특성이 포함되어 있지 않아서 어떤 XML을 제어 할 수 없기 때문에 내 문제가 의심 될 수 있습니다. msml.xsd를 사용하여 유효성 검사를 수행하고 싶습니다. schemaLocation
또는 noNamespaceSchemaLocation
(또는 아무것도) 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);
// 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);