Menu

[r19]: / src / wrapxerces.cpp  Maximize  Restore  History

Download this file

90 lines (79 with data), 2.2 kB

 1
 2
 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
#include "wrapxerces.h"
#define XERCES_TMPLSINC
//#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/sax2/XMLReaderFactory.hpp>
#include <xercesc/sax2/SAX2XMLReader.hpp>
#include <xercesc/sax2/DefaultHandler.hpp>
#include <xercesc/util/XMLUni.hpp>
#include <sstream>
#include <utility>
#include <stdexcept>
using namespace xercesc;
WrapXerces::WrapXerces()
{
try {
XMLPlatformUtils::Initialize();
}
catch (XMLException& e)
{
throw std::runtime_error("Cannot initialize Xerces");
}
errorPosition = std::make_pair(1, 1);
}
WrapXerces::~WrapXerces()
{
XMLPlatformUtils::Terminate();
}
bool WrapXerces::validate(const std::string& fileName)
{
SAX2XMLReader *parser = XMLReaderFactory::createXMLReader();
parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true);
parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
parser->setFeature(XMLUni::fgXercesDynamic, false);
parser->setFeature(XMLUni::fgXercesSchema, true);
parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true);
parser->setFeature(XMLUni::fgXercesValidationErrorAsFatal, true);
DefaultHandler handler;
MySAX2Handler mySAX2Handler;
parser->setContentHandler(&handler);
parser->setErrorHandler(&mySAX2Handler);
parser->setEntityResolver(&handler);
try {
parser->parse(fileName.c_str());
}
catch (XMLException& e)
{
delete parser;
char *err = XMLString::transcode(e.getMessage());
lastError = err;
XMLString::release(&err);
return false;
}
catch (SAXParseException& e)
{
delete parser;
char *err = XMLString::transcode(e.getMessage());
std::stringstream ss;
ss << "Validation stopped at line " << e.getLineNumber() << ", column " << e.getColumnNumber() << ": " << err;
lastError = ss.str();
errorPosition = std::make_pair(e.getLineNumber(), e.getColumnNumber());
XMLString::release(&err);
return false;
}
catch (...)
{
delete parser;
lastError = "Unexpected validation error";
return false;
}
delete parser;
return true;
}
std::string WrapXerces::getLastError()
{
return lastError;
}
std::pair<int, int> WrapXerces::getErrorPosition()
{
return errorPosition;
}
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.