файл схемы XSD предварительно компилируется с помощью xsdbin, и результат попадает в исполняемый файл примера.
у библиотеку, которая принимает XML-файлы и анализирует их. Чтобы пользователи не могли загружать в приложение недействительные xmls, я использую xerces для проверки файлов xml через xsd.
Тем не менее, мне удается проверить только против xsd-файлов. Теоретически, пользователь может просто открыть этот файл и возиться с ним. Вот почему я хотел бы, чтобы мой xsd был жестко закодирован в моей библиотеке.
К сожалению, я еще не нашел способ сделать это с XercesC ++.
Вот как это работает прямо сейчас ...
bool XmlParser::validateXml(std::string a_XsdFilename)
{
xercesc::XercesDOMParser domParser;
if (domParser.loadGrammar(a_XsdFilename.c_str(), xercesc::Grammar::SchemaGrammarType) == NULL)
{
throw Exceptions::Parser::XmlSchemaNotReadableException();
}
XercesParserErrorHandler parserErrorHandler;
domParser.setErrorHandler(&parserErrorHandler);
domParser.setValidationScheme(xercesc::XercesDOMParser::Val_Always);
domParser.setDoNamespaces(true);
domParser.setDoSchema(true);
domParser.setValidationSchemaFullChecking(true);
domParser.parse(m_Filename.c_str());
return (domParser.getErrorCount() == 0);
}
std::string m_Filename
переменная-член, содержащая путь к xml, который я проверяю
std::string a_XsdFilename
путь к xsd, с которым я проверяю.
XercesParserErrorHandler
наследует отxercesc::ErrorHandler
и делает обработку ошибок.
Как я могу заменитьstd::string a_XsdFilename
с чем-то вродеstd::string a_XsdText
? гдеstd::string a_XsdText
содержит само определение схемы вместо пути к файлу, содержащему определение схемы.