Xerces-C valida xml con xsd @ codifica
Estoy escribiendo una biblioteca que toma archivos xml y los analiza. Para evitar que los usuarios alimenten xmls inalídicos en mi aplicación, estoy usando xerces para validar los archivos xml a través de un xsd.
Sin embargo, solo logro validar contra archivos xsd. Teóricamente, un usuario podría simplemente abrir este archivo y jugar con él. Es por eso que me gustaría que mi xsd esté codificado en mi biblioteca.
amentablemente, todavía no he encontrado una manera de hacer esto con XercesC ++.
Así es como está funcionando ahora ...
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
es una variable miembro que contiene la ruta del xml que valido.
std::string a_XsdFilename
es la ruta a la xsd con la que valido.
XercesParserErrorHandler
hereda dexercesc::ErrorHandler
y maneja los errores.
¿Cómo puedo reemplazarstd::string a_XsdFilename
con algo comostd::string a_XsdText
? Dóndestd::string a_XsdText
contiene la definición del esquema en sí en lugar de una ruta a un archivo que contiene la definición del esquema.