OpenLexocad  27.1
Reader.h
Go to the documentation of this file.
1 #ifndef __CA_Reader_H__
2 #define __CA_Reader_H__
3 
5 #include <Base/FileInfo.h>
6 #include <Base/String.h>
7 #include <Base/Writer.h>
8 
9 #include <map>
10 #include <string>
11 #include <xercesc/sax2/Attributes.hpp>
12 #include <xercesc/sax2/DefaultHandler.hpp>
13 #include <xercesc/sax2/SAX2XMLReader.hpp>
14 #include <xercesc/util/XMLString.hpp>
15 
16 
17 
18 XERCES_CPP_NAMESPACE_USE
19 
20 class QByteArray;
21 
22 #pragma warning(push)
23 #pragma warning(disable : 4275)
24 
25 namespace Base
26 {
27 class XMLReaderPUG_Pimp;
28 
29 class LX_BASE_EXPORT XMLReaderPUG : public AbstractXMLReader
30 {
31 public:
33  XMLReaderPUG(const Base::String& FileName, std::istream&);
34  XMLReaderPUG(const Base::String& FileName, const QByteArray& dat);
35  ~XMLReaderPUG();
36 
37  inline bool isValid() const;
38  inline void read(void);
39  inline const char* localName(void);
40  inline void readElement(const char* ElementName = 0);
41  inline void readEndElement(const char* ElementName = 0);
42  inline void readCharacters(void);
43  inline unsigned int getAttributeCount(void) const;
44  inline bool hasAttribute(const char* AttrName) const;
45  inline long getAttributeAsInteger(const char* AttrName) const;
46  inline long getAttributeAsInteger(const wchar_t* AttrName) const;
47  inline double getAttributeAsDouble(const char* AttrName) const;
48  inline double getAttributeAsDouble(const wchar_t* AttrName) const;
49  inline Base::String getAttribute(const char* AttrName) const;
50  inline Base::String getAttribute(const wchar_t* AttrName) const;
51  inline const char* getAttributeAsConstChar(const char* AttrName) const;
52  inline Base::String getText();
53  virtual bool readInline() { return false; }
54 
55 
56 private:
57  XMLReaderPUG_Pimp* _pimpl;
58 };
59 
60 
61 
62 class LX_BASE_EXPORT XMLReader : public AbstractXMLReader, public DefaultHandler
63 {
64 public:
66  XMLReader(const Base::String& FileName, std::istream&);
67  ~XMLReader();
68 
69  inline bool isValid() const { return _valid; }
70 
73  // read the next element
74  inline void read(void);
76  inline const char* localName(void);
78  inline void readElement(const char* ElementName = 0);
80  inline void readEndElement(const char* ElementName = 0);
82  inline void readCharacters(void);
84 
87  inline unsigned int getAttributeCount(void) const;
90  inline bool hasAttribute(const char* AttrName) const;
92  inline long getAttributeAsInteger(const char* AttrName) const;
94  inline long getAttributeAsInteger(const wchar_t* AttrName) const;
96  inline double getAttributeAsDouble(const char* AttrName) const;
98  inline double getAttributeAsDouble(const wchar_t* AttrName) const;
100  inline Base::String getAttribute(const char* AttrName) const;
102  inline Base::String getAttribute(const wchar_t* AttrName) const;
104  inline const char* getAttributeAsConstChar(const char* AttrName) const;
106  inline Base::String getText();
108 
109  virtual bool readInline() { return false; }
110 
111 
112 
113 
114 private:
115 
116  virtual void setDocumentLocator(const Locator* const locator);
117 
118  // -----------------------------------------------------------------------
119  // Handlers for the SAX ContentHandler interface
120  // -----------------------------------------------------------------------
121  inline virtual void startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const Attributes& attrs);
122  inline virtual void endElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname);
123  inline virtual void characters(const XMLCh* const chars, const unsigned int length);
124  inline virtual void ignorableWhitespace(const XMLCh* const chars, const unsigned int length);
125  inline virtual void resetDocument();
126 
127  inline virtual void startCDATA();
128  inline virtual void endCDATA();
129 
130 
131  // -----------------------------------------------------------------------
132  // Handlers for the SAX ErrorHandler interface
133  // -----------------------------------------------------------------------
134  void warning(const SAXParseException& exc);
135  void error(const SAXParseException& exc);
136  void fatalError(const SAXParseException& exc);
137  void resetErrors();
138 
139 
140  std::string LocalName;
141  Base::String Characters;
142  unsigned int CharacterCount;
143 
144  const Attributes* m_attr;
145  std::map<std::string, Base::String> AttrMap;
146  typedef std::map<std::string, Base::String> AttrMapType;
147 
148  enum
149  {
150  None = 0,
151  Chars,
152  StartElement,
153  StartEndElement,
154  EndElement
155  } ReadType;
156 
157 
158  FileInfo _File;
159  SAX2XMLReader* parser;
160  XMLPScanToken token;
161  bool _valid;
162  static bool isinit;
163  Base::String _currentText;
164  bool _CDATA_START;
165  bool _CDATA_END;
166  const Locator* m_locator = 0;
167 };
168 } // namespace Base
169 
170 #pragma warning(pop)
171 
172 #endif // __CA_Reader_H__
virtual bool readInline()
Definition: Reader.h:109
A Utf-16 (windows) or ucs4 (unix) encoded string class.
Definition: String.h:23
Definition: AbstractXMLReader.h:7
virtual bool readInline()
Definition: Reader.h:53
Definition: Reader.h:29
bool isValid() const
Definition: Reader.h:69
Definition: Reader.h:62
Definition: AbstractXMLReader.h:5