Eclipse SUMO - Simulation of Urban MObility
SUMOSAXReader.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3// Copyright (C) 2012-2022 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
20// SAX-reader encapsulation containing binary reader
21/****************************************************************************/
22#pragma once
23#include <config.h>
24
25#include <string>
26#include <memory>
27#include <vector>
28#include <xercesc/sax2/SAX2XMLReader.hpp>
29#include <xercesc/sax/EntityResolver.hpp>
30#include <xercesc/sax/InputSource.hpp>
31#include "SUMOXMLDefinitions.h"
32
33
34// ===========================================================================
35// class declarations
36// ===========================================================================
40
41
42// ===========================================================================
43// class definitions
44// ===========================================================================
54public:
60 SUMOSAXReader(GenericSAXHandler& handler, const std::string& validationScheme, XERCES_CPP_NAMESPACE::XMLGrammarPool* grammarPool);
61
64
70 void setHandler(GenericSAXHandler& handler);
71
79 void setValidation(std::string validationScheme = "");
80
88 void parse(std::string systemID);
89
95 void parseString(std::string content);
96
103 bool parseFirst(std::string systemID);
104
110 bool parseNext();
111
119 bool parseSection(int element);
120
121private:
122 class LocalSchemaResolver : public XERCES_CPP_NAMESPACE::EntityResolver {
123 public:
124 LocalSchemaResolver(const bool haveFallback, const bool noOp) : myHaveFallback(haveFallback), myNoOp(noOp) {}
125 XERCES_CPP_NAMESPACE::InputSource* resolveEntity(const XMLCh* const publicId, const XMLCh* const systemId);
126 private:
127 const bool myHaveFallback;
128 const bool myNoOp;
129 };
130
131private:
141 void ensureSAXReader();
142
143
144private:
146
149
151 XERCES_CPP_NAMESPACE::XMLGrammarPool* myGrammarPool;
152
153 XERCES_CPP_NAMESPACE::XMLPScanToken myToken;
154
155 XERCES_CPP_NAMESPACE::SAX2XMLReader* myXMLReader;
156
157 std::unique_ptr<std::istream> myIStream;
158
159 std::unique_ptr<IStreamInputSource> myInputStream;
160
162 std::vector<SumoXMLTag> myXMLStack;
163
165
167
169
170 std::pair<int, SUMOSAXAttributes*> myNextSection;
171
172private:
175
178
179};
A handler which converts occuring elements and attributes into enums.
Xerces InputSource reading from arbitrary std::istream.
Encapsulated SAX-Attributes.
LocalSchemaResolver(const bool haveFallback, const bool noOp)
XERCES_CPP_NAMESPACE::InputSource * resolveEntity(const XMLCh *const publicId, const XMLCh *const systemId)
SAX-reader encapsulation containing binary reader.
Definition: SUMOSAXReader.h:53
bool parseSection(int element)
Continue a progressive parse started by parseFirst until the given element is encountered.
std::unique_ptr< IStreamInputSource > myInputStream
std::string myValidationScheme
Information whether built reader/parser shall validate XML-documents against schemata.
SUMOSAXReader(GenericSAXHandler &handler, const std::string &validationScheme, XERCES_CPP_NAMESPACE::XMLGrammarPool *grammarPool)
Constructor.
std::pair< int, SUMOSAXAttributes * > myNextSection
void setHandler(GenericSAXHandler &handler)
Sets the given handler as content and error handler for the reader.
void parseString(std::string content)
Parse XML from the given string.
LocalSchemaResolver myLocalResolver
bool parseFirst(std::string systemID)
Start parsing the given file using parseFirst of myXMLReader.
const SUMOSAXReader & operator=(const SUMOSAXReader &s)
invalidated assignment operator
std::unique_ptr< std::istream > myIStream
LocalSchemaResolver mySchemaResolver
void setValidation(std::string validationScheme="")
Sets a new validation scheme and applies the validation settings to the XML reader.
~SUMOSAXReader()
Destructor.
SUMOSAXReader(const SUMOSAXReader &s)
invalidated copy constructor
std::vector< SumoXMLTag > myXMLStack
The stack of begun xml elements.
GenericSAXHandler * myHandler
void parse(std::string systemID)
Parse the given file completely by calling parse of myXMLReader.
XERCES_CPP_NAMESPACE::SAX2XMLReader * myXMLReader
LocalSchemaResolver myNoOpResolver
XERCES_CPP_NAMESPACE::XMLGrammarPool * myGrammarPool
Schema cache to be used for grammars which are not declared.
XERCES_CPP_NAMESPACE::XMLPScanToken myToken
void ensureSAXReader()
Builds a reader, if needed.
bool parseNext()
Continue a progressive parse started by parseFirst.