файл схемы 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 содержит само определение схемы вместо пути к файлу, содержащему определение схемы.

Ответы на вопрос(1)

Ваш ответ на вопрос