⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 saxparser.h

📁 简单的xml解析类
💻 H
字号:
//************************************************************************************************************************** 
//* Blue Xml Extension
//* Copyright (c) 2002-2004 Josh Harler
//* 
//* Blue - General Purpose C++ Library
//* Copyright (c) 2002-2004 Josh Harler
//* 
//* This software is provided 'as-is', without any express or implied warranty. In no event
//* will the authors be held liable for any damages arising from the use of this software.
//* 
//* Permission is granted to anyone to use this software for any purpose, including commercial
//* applications, and to alter it and redistribute it freely, subject to the following restrictions:
//* 
//* 	1. The origin of this software must not be misrepresented; you must not claim that you
//* 	wrote the original software. If you use this software in a product, an acknowledgment in the
//* 	product documentation would be appreciated but is not required.
//* 
//* 	2. Altered source versions must be plainly marked as such, and must not be misrepresented as
//* 	being the original software.
//* 
//* 	3. This notice may not be removed or altered from any source distribution.
//*
//*
//* file   Blue/Extension/Xml/SaxParser.h
//**

#ifndef __blue_ext_xml_SaxParser_h_included__
#define __blue_ext_xml_SaxParser_h_included__

// Public Headers ==========================================================================================================

// Extension headers
#include "Blue/Extension/Xml/XmlParser.h"

// Blue library headers
#include "Blue/Common/Signals.h"


// Public Defines/Enums/Typedefs/Etc. ======================================================================================

// Public Classes/Structs ==================================================================================================

namespace blue {
namespace ext {
namespace xml {

	/**
	 * \class SaxParser
	 * \brief Gives access to an Xml document as it's being parsed.
	 * \ingroup Xml
	 *
	 * A Sax Xml parser reports each item in the Xml document as it
	 * encounters it, rather than when the Xml document is fully
	 * parsed.
	 *
	 * The main advantage of this method over the complete parse
	 * method used by Dom parsers is that the memory overhead is
	 * smaller.  This is because the Xml items are only kept in
	 * memory while they are being processed.  As soon as the
	 * listening slots are done with the item, they are released
	 * from memory.  In a Dom node-tree, every Xml item is kept
	 * in memory until they are all freed.
	 *
	 * \sa XmlParser, DomParser
	 */
	class BLUE_EXPORT_XML SaxParser :public XmlParser
	{
	public:
		// ===========================================================
		//  creation/destruction
		// ===========================================================

		/** Constructor. */
		SaxParser();
		/** Constructor. */
		SaxParser( data::InputStream* input );

		/** Destructor. */
		virtual ~SaxParser();


		// ===========================================================
		//  manipulation
		// ===========================================================

		/**
		 * Returns the signal that's called when the Xml document
		 * begins.
		 */
		Signal_0& sigDocumentBegin();
		/**
		 * Returns the signal that's called when the Xml document
		 * ends.
		 */
		Signal_0& sigDocumentEnd();

		/**
		 * Returns the signal that's called when a processing
		 * instruction begins.
		 */
		Signal_1<String>& sigProcInstBegin();
		/**
		 * Returns the signal that's called when a processing
		 * instruction attribute is encountered.
		 */
		Signal_2<String,String>& sigProcInstAttribute();
		/**
		 * Returns the signal that's called when a processing
		 * instruction ends.
		 */
		Signal_1<String>& sigProcInstEnd();

		/**
		 * Returns the signal that's called when an element
		 * begins.
		 */
		Signal_1<String>& sigElementBegin();
		/**
		 * Returns the signal that's called when an element
		 * attribute is encountered.
		 */
		Signal_2<String,String>& sigElementAttribute();
		/**
		 * Returns the signal that's called when an element's
		 * text data is encountered.
		 */
		Signal_1<String>& sigElementText();
		/**
		 * Returns the signal that's called when an element's
		 * text data is encountered through a CDATA tag.
		 */
		Signal_1<String>& sigElementCData();
		/**
		 * Returns the signal that's called when an element
		 * ends.
		 */
		Signal_1<String>& sigElementEnd();

		/**
		 * Returns the signal that's called when a comment
		 * is encountered.
		 */
		Signal_1<String>& sigComment();


	private:
		/**
		 * Copy constructor. Private because SaxParsers should not be
		 * manipulated by more than one instance.
		 */
		SaxParser( const SaxParser& );
		/** Private assignment operator. See copy constructor documentation. */
		const SaxParser& operator=( const SaxParser& );

		
		virtual void xmlReset();

		virtual void xmlDocumentBegin();
		virtual void xmlDocumentEnd();

		virtual void xmlProcInstBegin( String instruction );
		virtual void xmlProcInstAttribute( String name, String value );
		virtual void xmlProcInstEnd( String instruction );

		virtual void xmlElementBegin( String element );
		virtual void xmlElementAttribute( String name, String value );
		virtual void xmlElementText( String text );
		virtual void xmlElementCData( String cdata );
		virtual void xmlElementEnd( String element );

		virtual void xmlComment( String comment );


		Signal_0 m_sigDocumentBegin;
		Signal_0 m_sigDocumentEnd;

		Signal_1<String>        m_sigProcInstBegin;
		Signal_2<String,String> m_sigProcInstAttribute;
		Signal_1<String>        m_sigProcInstEnd;

		Signal_1<String>        m_sigElementBegin;
		Signal_2<String,String> m_sigElementAttribute;
		Signal_1<String>        m_sigElementText;
		Signal_1<String>        m_sigElementCData;
		Signal_1<String>        m_sigElementEnd;

		Signal_1<String> m_sigComment;
	};

}}}	// namespaces


// Public External Variables ===============================================================================================

// Public Function Prototypes ==============================================================================================

// Public Inline Functions =================================================================================================

#endif // include guard

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -