Xerces-C valida xml com xsd codificado
Estou escrevendo uma biblioteca que pega arquivos xml e os analisa. Para impedir que os usuários alimentem xmls inválidos no meu aplicativo, estou usando o xerces para validar os arquivos xml por meio de um xsd.
No entanto, eu apenas consigo validar contra arquivos xsd. Teoricamente, um usuário pode simplesmente abrir esse arquivo e mexer com ele. É por isso que eu gostaria que meu xsd fosse codificado na minha biblioteca.
Infelizmente ainda não encontrei uma maneira de fazer isso com o XercesC ++.
É assim que está funcionando agora ...
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
é uma variável de membro que mantém o caminho do xml que eu valido.
std::string a_XsdFilename
é o caminho para o xsd contra o qual valido.
XercesParserErrorHandler
herda dexercesc::ErrorHandler
e faz tratamento de erros.
Como posso substituirstd::string a_XsdFilename
com algo comostd::string a_XsdText
? Ondestd::string a_XsdText
contém a própria definição de esquema em vez de um caminho para um arquivo que contém a definição de esquema.