]> git.donarmstrong.com Git - flightcrew.git/blob - src/FlightCrew/Validators/Xml/WellFormedXml.cpp
Imported Upstream version 0.7.2+dfsg
[flightcrew.git] / src / FlightCrew / Validators / Xml / WellFormedXml.cpp
1 /************************************************************************\r
2 **\r
3 **  Copyright (C) 2010  Strahinja Markovic\r
4 **\r
5 **  This file is part of FlightCrew.\r
6 **\r
7 **  FlightCrew is free software: you can redistribute it and/or modify\r
8 **  it under the terms of the GNU Lesser General Public License as published\r
9 **  by the Free Software Foundation, either version 3 of the License, or\r
10 **  (at your option) any later version.\r
11 **\r
12 **  FlightCrew is distributed in the hope that it will be useful,\r
13 **  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14 **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
15 **  GNU Lesser General Public License for more details.\r
16 **\r
17 **  You should have received a copy of the GNU Lesser General Public License\r
18 **  along with FlightCrew.  If not, see <http://www.gnu.org/licenses/>.\r
19 **\r
20 *************************************************************************/\r
21 \r
22 #include <stdafx.h>\r
23 #include "WellFormedXml.h"\r
24 #include "Misc/ErrorResultCollector.h"\r
25 #include <xercesc/sax/SAXException.hpp>\r
26 #include <LocationAwareDOMParser.h>\r
27 #include <ToXercesStringConverter.h>\r
28 #include "Misc/Utilities.h"\r
29 \r
30 namespace FlightCrew\r
31 {\r
32     \r
33 \r
34 WellFormedXml::WellFormedXml()\r
35 {\r
36     // This scanner ignores schemas and DTDs\r
37     parser.useScanner( xc::XMLUni::fgWFXMLScanner );\r
38     parser.setValidationScheme( xc::AbstractDOMParser::Val_Never );\r
39     parser.setDoNamespaces( true );\r
40 }\r
41 \r
42 \r
43 std::vector< Result > WellFormedXml::ValidateFile( const fs::path &filepath )\r
44 {\r
45     parser.resetDocumentPool();\r
46 \r
47     ErrorResultCollector collector;\r
48     parser.setErrorHandler( &collector );\r
49 \r
50     try\r
51     {\r
52         parser.parse( toX( Util::BoostPathToUtf8Path( filepath ) ) );\r
53     }\r
54 \r
55     catch ( xc::SAXException& exception )\r
56     {\r
57         collector.AddNewExceptionAsResult( exception );\r
58     }\r
59 \r
60     catch ( xc::XMLException& exception )\r
61     {\r
62         collector.AddNewExceptionAsResult( exception );\r
63     }    \r
64 \r
65     catch ( xc::DOMException& exception )\r
66     {\r
67         collector.AddNewExceptionAsResult( exception );\r
68     }\r
69 \r
70     return Util::AddPathToResults( collector.GetResults(), filepath );\r
71 }\r
72 \r
73 \r
74 xc::DOMDocument& WellFormedXml::GetDocument()\r
75 {\r
76     return *parser.getDocument();\r
77 }\r
78 \r
79 } //namespace FlightCrew\r