5 #include <Poco/SAX/ContentHandler.h>
6 #include <Poco/SAX/DTDHandler.h>
8 #include "util/Loggable.h"
26 const Poco::XML::XMLString &localName,
27 const Poco::XML::XMLString &qName,
28 const Poco::XML::XMLString &uri
32 bool is(
const Poco::XML::XMLString &localName,
33 const Poco::XML::XMLString &qName,
34 const Poco::XML::XMLString &uri)
const;
36 const Poco::XML::XMLString localName;
37 const Poco::XML::XMLString qName;
38 const Poco::XML::XMLString uri;
39 Poco::XML::XMLString content;
43 public Poco::XML::ContentHandler,
44 public Poco::XML::DTDHandler,
50 virtual void processingInstruction(
51 const Poco::XML::XMLString &target,
52 const Poco::XML::XMLString &data);
54 virtual void skippedEntity(
const Poco::XML::XMLString &name);
60 const Poco::XML::XMLChar c[],
69 virtual void characters(
const Poco::XML::XMLChar c[],
70 int start,
int length)
override;
88 const Poco::XML::XMLString &localName,
89 const Poco::XML::XMLString &qName,
90 const Poco::XML::Attributes &attrList)
override;
97 void endElement(
const Poco::XML::XMLString &uri,
98 const Poco::XML::XMLString &localName,
99 const Poco::XML::XMLString &qName)
override;
101 virtual void startPrefixMapping(
102 const Poco::XML::XMLString &prefix,
103 const Poco::XML::XMLString &uri)
override;
105 virtual void endPrefixMapping(
const Poco::XML::XMLString &prefix)
override;
107 void setDocumentLocator(
const Poco::XML::Locator *loc)
override;
109 virtual void notationDecl(
const Poco::XML::XMLString &name,
110 const Poco::XML::XMLString *publicId,
111 const Poco::XML::XMLString *systemId)
override;
113 virtual void unparsedEntityDecl(
const Poco::XML::XMLString &name,
114 const Poco::XML::XMLString *publicId,
115 const Poco::XML::XMLString &systemId,
116 const Poco::XML::XMLString ¬ationName)
override;
118 static void parse(
const Poco::Path &
path,
SAXHelper &helper);
132 const Poco::XML::Attributes &attrList);
151 const Poco::XML::XMLChar c[],
167 int start,
int length);
180 const Poco::XML::XMLString &name,
181 Poco::XML::XMLString &value)
const;
188 const Poco::XML::XMLString &name,
189 double &value)
const;
196 const Poco::XML::XMLString &name,
202 void error(
const std::string &message)
const;
207 void fatal(
const std::string &message)
const;
217 const Poco::XML::Locator &
locator()
const;
222 const std::deque<SAXElement> &
path()
const;
237 template <
typename T>
240 return m_path.size() > 1
241 && m_path[0].isRoot()
242 && checkPath(1, name);
248 template <
typename T,
typename ...Ts>
251 return m_path.size() > 1
252 && m_path[0].isRoot()
253 && checkPath(1, name, ts...);
257 bool checkPath(
unsigned int i)
const
259 return i == m_path.size();
262 template <
typename T>
263 bool checkPath(
unsigned int i,
const T &name)
const
265 return i < m_path.size()
266 && matchPathElement(m_path[i], name)
270 template <
typename T,
typename ...Ts>
271 bool checkPath(
unsigned int i,
const T &name,
const Ts &... ts)
const
273 return i < m_path.size()
274 && matchPathElement(m_path[i], name)
275 && checkPath(i + 1, ts...);
278 template <
typename T>
279 bool matchPathElement(
const SAXElement &element,
const T &name)
const
281 return element.localName == name || name == std::string(
"*");
285 const Poco::XML::Locator *m_locator;
286 std::deque<SAXElement> m_path;
virtual void characters(const Poco::XML::XMLChar c[], int start, int length) override
Definition: SAXHelper.cpp:261
Definition: SAXHelper.h:23
void endDocument() override
Definition: SAXHelper.cpp:183
bool getAttributeAsDouble(const Poco::XML::Attributes &attrList, const Poco::XML::XMLString &name, double &value) const
Definition: SAXHelper.cpp:351
Definition: SAXHelper.h:42
void trimContent(const Poco::XML::XMLChar c[], int &start, int &length)
Definition: SAXHelper.cpp:297
void endElement(const Poco::XML::XMLString &uri, const Poco::XML::XMLString &localName, const Poco::XML::XMLString &qName) override
void startElement(const Poco::XML::XMLString &uri, const Poco::XML::XMLString &localName, const Poco::XML::XMLString &qName, const Poco::XML::Attributes &attrList) override
const Poco::XML::Locator & locator() const
Definition: SAXHelper.cpp:152
const SAXElement & current() const
Definition: SAXHelper.cpp:162
virtual bool expectElement(const SAXElement &element) const
Definition: SAXHelper.cpp:218
const SAXElement & parent() const
Definition: SAXHelper.cpp:170
void appendContent(const Poco::XML::XMLChar c[], int start, int length)
const std::deque< SAXElement > & path() const
Definition: SAXHelper.cpp:157
void error(const std::string &message) const
Definition: SAXHelper.cpp:142
virtual void preprocessContent(const Poco::XML::XMLChar c[], int &start, int &length)
Definition: SAXHelper.cpp:284
const std::string beginMessage() const
Definition: SAXHelper.cpp:125
virtual void ignorableWhitespace(const Poco::XML::XMLChar c[], int start, int length) override
Definition: SAXHelper.cpp:256
Definition: Loggable.h:19
bool isPathFromRoot(const T &name, const Ts &...ts) const
Definition: SAXHelper.h:249
bool getAttributeAsInt(const Poco::XML::Attributes &attrList, const Poco::XML::XMLString &name, int &value) const
Definition: SAXHelper.cpp:364
bool isPathFromRoot(const T &name) const
Definition: SAXHelper.h:238
void startDocument() override
Definition: SAXHelper.cpp:178
virtual bool expectContent(int length) const
Definition: SAXHelper.cpp:279
void fatal(const std::string &message) const
Definition: SAXHelper.cpp:147
bool getAndTrimAttribute(const Poco::XML::Attributes &attrList, const Poco::XML::XMLString &name, Poco::XML::XMLString &value) const
Definition: SAXHelper.cpp:337