OpenLexocad  28.0
Reader.h
Go to the documentation of this file.
1 #pragma once
3 #include <xercesc/sax2/DefaultHandler.hpp>
4 #include <xercesc/framework/XMLPScanToken.hpp>
5 #include <filesystem>
6 #include <map>
7 
9 {
10 class SAX2XMLReader;
11 class Attributes;
12 class Locator;
13 class SAXParseException;
14 }
15 
16 class QByteArray;
17 
18 namespace Base
19 {
20 
21 
22 class LX_BASE_EXPORT XMLReader : public AbstractXMLReader, public XERCES_CPP_NAMESPACE::DefaultHandler
23 {
24 public:
26  XMLReader(const Base::String& FileName, std::istream&);
28 
29  inline bool isValid() const { return _valid; }
30 
33  // read the next element
34  inline void read(void);
36  inline const char* localName(void);
38  inline void readElement(const char* ElementName = 0);
40  inline void readEndElement(const char* ElementName = 0);
42  inline void readCharacters(void);
44 
47  inline unsigned int getAttributeCount(void) const;
50  inline bool hasAttribute(const char* AttrName) const;
52  inline long getAttributeAsInteger(const char* AttrName) const;
54  inline long getAttributeAsInteger(const wchar_t* AttrName) const;
56  inline double getAttributeAsDouble(const char* AttrName) const;
58  inline double getAttributeAsDouble(const wchar_t* AttrName) const;
60  inline Base::String getAttribute(const char* AttrName) const;
62  inline Base::String getAttribute(const wchar_t* AttrName) const;
64  inline std::string getAttributeString(const char* AttrName) const;
68 
69  virtual bool readInline() { return false; }
70 
71 
72 
73 
74 private:
75 
76  virtual void setDocumentLocator(const XERCES_CPP_NAMESPACE::Locator* const locator);
77 
78  // -----------------------------------------------------------------------
79  // Handlers for the SAX ContentHandler interface
80  // -----------------------------------------------------------------------
81  inline virtual void startElement(const XMLCh* const uri,
82  const XMLCh* const localname,
83  const XMLCh* const qname,
84  const XERCES_CPP_NAMESPACE::Attributes& attrs);
85  inline virtual void endElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname);
86  inline virtual void characters(const XMLCh* const chars, const unsigned int length);
87  inline virtual void ignorableWhitespace(const XMLCh* const chars, const unsigned int length);
88  inline virtual void resetDocument();
89 
90  inline virtual void startCDATA();
91  inline virtual void endCDATA();
92 
93 
94  // -----------------------------------------------------------------------
95  // Handlers for the SAX ErrorHandler interface
96  // -----------------------------------------------------------------------
97  void warning(const XERCES_CPP_NAMESPACE::SAXParseException& exc);
98  void error(const XERCES_CPP_NAMESPACE::SAXParseException& exc);
99  void fatalError(const XERCES_CPP_NAMESPACE::SAXParseException& exc);
100  void resetErrors();
101 
102 
103  std::string LocalName;
104  Base::String Characters;
105  unsigned int CharacterCount;
106 
107  const XERCES_CPP_NAMESPACE::Attributes* m_attr;
108  std::map<std::string, Base::String> AttrMap;
109  typedef std::map<std::string, Base::String> AttrMapType;
110 
111  enum
112  {
113  None = 0,
114  Chars,
115  StartElement,
116  StartEndElement,
117  EndElement
118  } ReadType;
119 
120 
121  std::filesystem::path _File;
122  XERCES_CPP_NAMESPACE::SAX2XMLReader* parser;
123  XERCES_CPP_NAMESPACE::XMLPScanToken token;
124  bool _valid;
125  static bool isinit;
126  Base::String _currentText;
127  bool _CDATA_START;
128  bool _CDATA_END;
129  const XERCES_CPP_NAMESPACE::Locator* m_locator = 0;
130 };
131 } // namespace Base
132 
Base::XMLReader::readEndElement
void readEndElement(const char *ElementName=0)
reads until it findes a end element (with special name if given)
Base::XMLReader::getAttribute
Base::String getAttribute(const wchar_t *AttrName) const
returns the named attribute as an double floating point (does type checking)
Base::XMLReader::getAttribute
Base::String getAttribute(const char *AttrName) const
returns the named attribute as an double floating point (does type checking)
Base::XMLReader::getText
Base::String getText()
Returns the text of Characters.
Base::XMLReader::readCharacters
void readCharacters(void)
reads until it findes characters
Base::XMLReader::readInline
virtual bool readInline()
Definition: Reader.h:69
AbstractXMLReader.h
Base::XMLReader::readElement
void readElement(const char *ElementName=0)
reads until it findes a start element (<name>) or start-end element (<name>) (with special name if gi...
XERCES_CPP_NAMESPACE
Definition: Reader.h:9
Base::XMLReader::getAttributeAsDouble
double getAttributeAsDouble(const char *AttrName) const
returns the named attribute as an double floating point (does type checking)
Base::XMLReader::getAttributeString
std::string getAttributeString(const char *AttrName) const
Base::XMLReader::read
void read(void)
Base::XMLReader::isValid
bool isValid() const
Definition: Reader.h:29
Base::XMLReader
Definition: Reader.h:23
Base::XMLReader::getAttributeAsDouble
double getAttributeAsDouble(const wchar_t *AttrName) const
returns the named attribute as an double floating point (does type checking)
Base::AbstractXMLReader
Definition: AbstractXMLReader.h:7
Base::XMLReader::getAttributeAsInteger
long getAttributeAsInteger(const wchar_t *AttrName) const
returns the named attribute as an interer (does type checking)
Base::XMLReader::localName
const char * localName(void)
get the local name of the current Element
Base::XMLReader::hasAttribute
bool hasAttribute(const char *AttrName) const
check if the read element has a special attribute
Base::String
A Utf-16 (windows) or ucs4 (unix) encoded string class.
Definition: String.h:18
Base::XMLReader::~XMLReader
~XMLReader()
Base::XMLReader::XMLReader
XMLReader(const Base::String &FileName, std::istream &)
opens the file and read the first element
Base::XMLReader::getAttributeAsInteger
long getAttributeAsInteger(const char *AttrName) const
returns the named attribute as an interer (does type checking)
Base
Definition: AbstractXMLReader.h:5