📄 saxparser.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 + -