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

📄 domparser.cpp

📁 简单的xml解析类
💻 CPP
字号:
//************************************************************************************************************************** 
//* 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/DomParser.cpp
//**

// Private Headers =========================================================================================================

// matching header
#include "DomParser.h"


// Private Defines/Enums/Typedefs/Etc ======================================================================================

// Private Classes/Structs =================================================================================================

// Private Global Variables ================================================================================================

// External Global Variables ===============================================================================================

// Private Functions =======================================================================================================

// Functions ===============================================================================================================

namespace blue {
namespace ext {
namespace xml {

	// ---------------------------------------------------------------------------------------------------------------------

	DomParser::DomParser() :m_document(0), m_current(0)
	{
	}

	// ---------------------------------------------------------------------------------------------------------------------

	DomParser::DomParser( data::InputStream* input ) :XmlParser(input), m_document(0), m_current(0)
	{
	}

	// ---------------------------------------------------------------------------------------------------------------------

	DomParser::~DomParser()
	{
		if( m_document != 0 ) {
			delete m_document;
		}
	}

	// ---------------------------------------------------------------------------------------------------------------------

	DomDocumentNode* DomParser::getDocumentNode()
	{
		return (m_document);
	}

	// ---------------------------------------------------------------------------------------------------------------------

	const DomDocumentNode* DomParser::getDocumentNode() const
	{
		return (m_document);
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlReset()
	{
		if( m_document != 0 ) {
			delete m_document;
		}

		m_document = 0;
		m_current  = 0;
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlDocumentBegin()
	{
		m_document = new DomDocumentNode();
		m_current = m_document;
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlDocumentEnd()
	{
		m_current = 0;
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlProcInstBegin( String instruction )
	{
		DomProcInstNode* node = new DomProcInstNode(m_current, instruction);
		m_current = node;
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlProcInstAttribute( String name, String value )
	{
		DomAttributeNode* node = new DomAttributeNode(m_current, name, value);
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlProcInstEnd( String instruction )
	{
		m_current = m_current->getParent();
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlElementBegin( String element )
	{
		if( m_current->getNodeType() == DomNode::ELEMENT ) {
			Array<DomNode*> nodes = m_current->getSubNodes();
			if( nodes.getSize() > 0 && nodes[nodes.getSize()-1]->getNodeType() == DomNode::ELEMENT ) {
				xmlElementText(String::null);
			}
		}

		DomElementNode* node = new DomElementNode(m_current, element);
		m_current = node;
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlElementAttribute( String name, String value )
	{
		DomAttributeNode* node = new DomAttributeNode(m_current, name, value);
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlElementText( String data )
	{
		DomTextNode* node = new DomTextNode(m_current, data);
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlElementCData( String data )
	{
		DomCDataNode* node = new DomCDataNode(m_current, data);
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlElementEnd( String element )
	{
		if( m_current->getNodeType() == DomNode::ELEMENT ) {
			Array<DomNode*> nodes = m_current->getSubNodes();
			if( nodes.getSize() > 0 && nodes[nodes.getSize()-1]->getNodeType() == DomNode::ELEMENT ) {
				xmlElementText(String::null);
			}
		}

		m_current = m_current->getParent();
	}

	// ---------------------------------------------------------------------------------------------------------------------

	void DomParser::xmlComment( String comment )
	{
		DomCommentNode* node = new DomCommentNode(m_current, comment);
	}


}}}	// namespaces

⌨️ 快捷键说明

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