| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 
 |  
#include "StdAfx.h"
#include <iostream>
#include <sys/stat.h>
 
#include "linestyleParser.h"
 
using namespace xercesc;
using namespace std;
 
/**
 * Constructeur du parseur
 * @param strLineStyleFile: String qui contient le path vers le fichier XML
 * @param strXMLGrammarFile: String qui contient le path vers le fichier XSD
 */
linestyleParser::linestyleParser(string& strLineStyleFile ,string& strXMLGrammarFile) 
{
	try {
		XMLPlatformUtils::Initialize();
	}
	catch (...) {
		cout<<"erreur de chargement de la lib xerces"<<endl;
	}
 
	(valideFile(strLineStyleFile))?mStrXMLLinesStyleFile=strLineStyleFile:throw ( std::runtime_error("fichier invalide")); 
	(valideFile(strXMLGrammarFile))?mStrXMLGrammarFile=strXMLGrammarFile:throw ( std::runtime_error("fichier invalide")); 
 
	mFileParser = new XercesDOMParser;
 
}
 
/**
 * Méthode permettant de vérifier si un fichier est accéssible
 * @param file: String qui contient le path vers le fichier a verifier
 * @return true si le fichiers est accessible, false sinon.
 */
bool linestyleParser::valideFile(string& file){
 
	bool valide=true;
 
	struct stat fileStatus;
	int iretStat = stat(file.c_str(), &fileStatus);
	if( iretStat == ENOENT )
		valide=false; //Path file_name does not exist, or path is an empty string.
	else if( iretStat == ENOTDIR )
		valide=false; //A component of the path is not a directory.
	else if( iretStat == EACCES )
		valide=false; //Permission denied.
	else if( iretStat == ENAMETOOLONG )
		valide=false; //File can not be read
 
	return valide;
}
 
/** 
 * Destructeur du parseur
 */
linestyleParser::~linestyleParser(void)
{
	delete mFileParser;
	XMLPlatformUtils::Terminate();
}
 
/************************************************************************/
/*                                                                      */
/************************************************************************/
 
class ParserErrorHandler : public ErrorHandler
{
private:
	void reportParseException(const SAXParseException& ex)
	{
		char* msg = XMLString::transcode(ex.getMessage());
		fprintf(stderr, "at line %llu column %llu, %s\n", 
			ex.getColumnNumber(), ex.getLineNumber(), msg);
		XMLString::release(&msg);
	}
 
public:
	void warning(const SAXParseException& ex)
	{
		reportParseException(ex);
	}
 
	void error(const SAXParseException& ex)
	{
		reportParseException(ex);
	}
 
	void fatalError(const SAXParseException& ex)
	{
		reportParseException(ex);
	}
 
	void resetErrors()
	{
	}
};
 
 
 
 
 
/************************************************************************/
/*                                                                      */
/************************************************************************/
 
 
 
/** 
 * Méthode qui permet de tester la validiter un fichier XML via une grammaire XSD
 * @return true si le fichier est valide, false sinon
 */
bool linestyleParser::validate(void){
	if (mFileParser->loadGrammar(mStrXMLGrammarFile.c_str(), Grammar::SchemaGrammarType) == NULL)
	{
		fprintf(stderr, "couldn't load schema\n");
		return false;
	}
 
	ParserErrorHandler parserErrorHandler;
	mFileParser->setErrorHandler(&parserErrorHandler);
	mFileParser->setValidationScheme(XercesDOMParser::Val_Auto);
	mFileParser->setDoNamespaces(true);
	mFileParser->setDoSchema(true);
	mFileParser->setValidationConstraintFatal(true);
 
	mFileParser->parse(mStrXMLLinesStyleFile.c_str());
	if (mFileParser->getErrorCount() == 0)
		printf("XML file validated against the schema successfully\n");
	else
		printf("XML file doesn't conform to the schema\n");
 
 
	return true;
}
 
/** 
 * Méthode qui permet de récuperer les styles de lignes contenue dans le fichier XML 
 */
void linestyleParser::loadLineStyle(void){
 
 
} | 
Partager