#ifndef ARABICA_XSLT_VALUE_OF_HANDLER_HPP #define ARABICA_XSLT_VALUE_OF_HANDLER_HPP #include #include "../xslt_value_of.hpp" namespace Arabica { namespace XSLT { template class ValueOfHandler : public SAX::DefaultHandler { public: ValueOfHandler(CompilationContext& context) : context_(context), valueOf_(0) { } // ValueOfHandler virtual void startElement(const string_type& /* namespaceURI */, const string_type& /* localName */, const string_type& qName, const SAX::Attributes& atts) { if(valueOf_ == 0) { static const ValueRule rules[] = { { "select", true, 0, 0 }, { "disable-output-escaping", false, No, AllowedYesNo }, { 0, false, 0, 0 } }; std::map attrs = gatherAttributes(qName, atts, rules); valueOf_ = new ValueOf(context_.xpath_expression(attrs["select"]), attrs["disable-output-escaping"] == Yes); return; } // if(valueOf_ == 0) throw SAX::SAXException(qName + " can not contain elements"); } // startElement virtual void endElement(const string_type& /* namespaceURI */, const string_type& /* localName */, const string_type& /* qName */) { context_.parentContainer().add_item(valueOf_); context_.pop(); } // endElement virtual void characters(const string_type& ch) { verifyNoCharacterData(ch, "xsl:value-of"); } // characters private: CompilationContext& context_; ValueOf* valueOf_; }; // class ValueOfHandler } //namespace XSLT } //namespace Arabica #endif