35 #include <xercesc/sax2/XMLReaderFactory.hpp>
36 #include <xercesc/framework/LocalFileInputSource.hpp>
37 #include <xercesc/framework/MemBufInputSource.hpp>
48 #ifdef CHECK_MEMORY_LEAKS
50 #endif // CHECK_MEMORY_LEAKS
57 : myHandler(&handler), myValidationScheme(validationScheme),
58 myXMLReader(0), myBinaryInput(0) {}
80 if (validationScheme == XERCES_CPP_NAMESPACE::SAX2XMLReader::Val_Never) {
82 myXMLReader->setProperty(XERCES_CPP_NAMESPACE::XMLUni::fgXercesScannerName, (
void*)XERCES_CPP_NAMESPACE::XMLUni::fgWFXMLScanner);
85 myXMLReader->setProperty(XERCES_CPP_NAMESPACE::XMLUni::fgXercesScannerName, (
void*)XERCES_CPP_NAMESPACE::XMLUni::fgIGXMLScanner);
86 myXMLReader->setFeature(XERCES_CPP_NAMESPACE::XMLUni::fgXercesSchema,
true);
87 myXMLReader->setFeature(XERCES_CPP_NAMESPACE::XMLUni::fgSAX2CoreValidation,
true);
88 myXMLReader->setFeature(XERCES_CPP_NAMESPACE::XMLUni::fgXercesDynamic, validationScheme == XERCES_CPP_NAMESPACE::SAX2XMLReader::Val_Auto);
97 if (systemID.length() >= 4 && systemID.substr(systemID.length() - 4) ==
".sbx") {
115 XERCES_CPP_NAMESPACE::MemBufInputSource memBufIS((
const XMLByte*)content.c_str(), content.size(),
"registrySettings");
122 if (systemID.substr(systemID.length() - 4) ==
".sbx") {
131 std::vector<std::string> elems;
146 std::vector< std::vector<unsigned int> > followers;
154 myToken = XERCES_CPP_NAMESPACE::XMLPScanToken();
188 throw ProcessError(
"The XML-parser was not initialized.");
195 XERCES_CPP_NAMESPACE::SAX2XMLReader*
197 XERCES_CPP_NAMESPACE::SAX2XMLReader* reader = XERCES_CPP_NAMESPACE::XMLReaderFactory::createXMLReader();
199 throw ProcessError(
"The XML-parser could not be build.");
203 reader->setProperty(XERCES_CPP_NAMESPACE::XMLUni::fgXercesScannerName, (
void*)XERCES_CPP_NAMESPACE::XMLUni::fgWFXMLScanner);
206 reader->setFeature(XERCES_CPP_NAMESPACE::XMLUni::fgXercesSchema,
true);
207 reader->setFeature(XERCES_CPP_NAMESPACE::XMLUni::fgSAX2CoreValidation,
true);
208 reader->setFeature(XERCES_CPP_NAMESPACE::XMLUni::fgXercesDynamic,
myValidationScheme == XERCES_CPP_NAMESPACE::SAX2XMLReader::Val_Auto);
216 XERCES_CPP_NAMESPACE::InputSource*
219 const std::string::size_type pos = url.rfind(
"/");
220 if (pos != std::string::npos) {
221 const std::string dir = url.substr(0, pos);
222 if (dir ==
"http://sumo-sim.org/xsd" || dir ==
"http://sumo.sf.net/xsd" || dir ==
"http://sumo-sim.org/xsd/amitran") {
223 const char* sumoPath = std::getenv(
"SUMO_HOME");
225 WRITE_WARNING(
"Environment variable SUMO_HOME is not set, schema resolution will use slow website lookups.");
228 const std::string file = sumoPath + std::string(
"/data/xsd") + url.substr(url.find(
"/xsd/") + 4);
230 XMLCh* t = XERCES_CPP_NAMESPACE::XMLString::transcode(file.c_str());
231 XERCES_CPP_NAMESPACE::InputSource*
const result =
new XERCES_CPP_NAMESPACE::LocalFileInputSource(t);
232 XERCES_CPP_NAMESPACE::XMLString::release(&t);
235 WRITE_WARNING(
"Cannot find local schema '" + file +
"', will try website lookup.");