#ifndef ARABICA_DOM_DUALMODE_DUALMODE_HPP #define ARABICA_DOM_DUALMODE_DUALMODE_HPP #include #include namespace Arabica { namespace DualMode { template, class SAX_parser = Arabica::SAX::XMLReader > class Parser : public Arabica::SAX2DOM::Parser { typedef Arabica::SAX2DOM::Parser BaseT; public: typedef boost::function2 &, Arabica::DOM::Node &> ElementHandlerT; void setElementEndHandler(ElementHandlerT func) { elementEndFunc_ = func; } // setElementEndHandler protected: virtual void endElement(const stringT& namespaceURI, const stringT& localName, const stringT& qName) { if(BaseT::currentNode() == 0) return; Arabica::DOM::Node child(BaseT::currentNode()); BaseT::endElement(namespaceURI, localName, qName); if(!!elementEndFunc_) elementEndFunc_(BaseT::currentNode(), child); } // endElement private: ElementHandlerT elementEndFunc_; }; // class Parser } // namespace DualMode } // namespace Arabica #endif