亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? domdocument.cpp

?? 有關于C++網絡傳輸操作的一個DLL開發,希望對學習C++的人有幫助
?? CPP
字號:

#include <stdafx.h>
#include "DOMDocument.h"
#include <assert.h>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#define TEMP_BUF_LEN 1024

DOMDocument::DOMDocument() :
	m_pos(0),
	m_root(NULL)
{
	m_version = "1.0";
	m_encode = "GB2312";
}

DOMDocument::~DOMDocument()
{

}

int DOMDocument::LoadXML(const char* buffer, unsigned long bufferSize)
{
	assert(buffer);
	if (!buffer)
		return -1;

	m_pos = 0;

	m_xml = buffer;

	int result = ParseXmlInfo();
	
	return ParseRoot();
}

int DOMDocument::LoadXML(MLPCSTR pathXML)
{
	int ret = 0;
	char *xmlBuffer = NULL;
	FILE *pf = fopen(pathXML, "rb");
	if (!pf)
	{
		//printf("ERROR: Can't open %s\n", pathXML);
		return -1;
	}

	fpos_t pos; 
	if (fseek(pf, 0, SEEK_END))
	{
		fclose(pf);
		return -1;
	}

	if (fgetpos(pf, &pos))
	{
		fclose(pf);		
		return -1;
	}

	if (pos <= 0)
	{
		fclose(pf);
		return -1;
	}

	xmlBuffer = new char[pos];
	assert(xmlBuffer);
	if (!xmlBuffer)
	{
		fclose(pf);
		delete[] xmlBuffer;
		return -1;
	}
	
	rewind(pf);
	fread(xmlBuffer, pos, 1, pf);
	fclose(pf);
	
	ret = LoadXML(xmlBuffer, pos);
	delete[] xmlBuffer;
	return ret;
}

int DOMDocument::ParseXmlInfo()
{
	//Try to find the start of the version tag.
	string m_ShortStr;

	//獲取版本
	int version_start = 0;
	int version_finish = 0;
	
	m_pos = m_xml.find("version");
	if (m_pos == string::npos)
		return -1;
	version_start = m_xml.find("\"",m_pos) + 1;
	version_finish = m_xml.find("\"",version_start+1);

	if(version_start != string::npos && version_finish != string::npos)
	{
		m_version = m_xml.substr(version_start, version_finish - version_start);
	}
	else
	{
		version_start = m_xml.find("\'",m_pos) + 1;
		version_finish = m_xml.find("\'",version_start+1);
		if(version_start != string::npos && version_finish != string::npos)
		{
			m_version = m_xml.substr(version_start, version_finish - version_start);
		}
		else
		{
			m_version = "1.0";
		}
	}
	
	
	//獲取編碼
	version_start = 0;
	version_start = m_xml.find("encoding");

	if (version_start == string::npos)
		return -1;

	version_start = m_xml.find("\"",version_start) + 1;
	version_finish = m_xml.find("\"",version_start+1);
	if(version_start != string::npos && version_finish != string::npos)
	{
		m_encode = m_xml.substr(version_start, version_finish - version_start);
	}
	else
	{
		version_start = m_xml.find("\'",m_pos) + 1;
		version_finish = m_xml.find("\'",version_start+1);
		if(version_start != string::npos && version_finish != string::npos)
		{
			m_encode = m_xml.substr(version_start, version_finish - version_start);
		}
		else
		{
			m_encode = "GB2312";
		}
	}	
	
	return 0;
}


int DOMDocument::BuildXmlInfo()
{
	string version_str = "<?xml ";
	version_str += "version=\"";
	version_str += m_version;
	version_str += "\" encoding=\"";
	version_str += m_encode;
	
	version_str += "\"?>\r\n";
	m_xml = version_str;

	return 0;
}


int DOMDocument::BuildXML(DOMElement* pElement)
{
	//清空內容
	m_xml = "";
	m_pos = 0;

	int ret = 0;
	if ( (ret = BuildXmlInfo()) != 0)
		return ret;

	if(!pElement)
	{		
		return m_root.BuildElement(m_xml);
	}
	else
	{
	    return pElement->BuildElement(m_xml);	
	}
}



int DOMDocument::findNextTag(string &tagName, string &beforeTag)
{
	tagName = "";	
	beforeTag = "";

	int beforeTagStart = m_xml.find_first_not_of("\t\r\n ", m_pos);
	if (beforeTagStart == string::npos)
		return -1;

	int beforeTagFinish = m_xml.find("<", beforeTagStart);
	if (beforeTagFinish == string::npos)
		return -1;
	
	if (beforeTagFinish - beforeTagStart > 0)
	{
		beforeTag = m_xml.substr(beforeTagStart, beforeTagFinish - beforeTagStart);

		// trim left tempString
		TRIM_LEFT(beforeTag);
	}
	
	// Find the tag finish position.
	int tag_start = beforeTagFinish;
	int tag_finish = m_xml.find(">", tag_start);
	if (tag_finish == string::npos)
		return -1;
	
	tagName = m_xml.substr(tag_start + 1, tag_finish - tag_start - 1);
	m_pos = tag_finish + 1;

	return 0;
}

int DOMDocument::ParseElement(DOMElement* element)
{
	assert(element != NULL);
	if (element == NULL)
		return -1;
	
	while(m_pos < m_xml.size())
	{
		string tagName;
		string beforeTag;
		if (findNextTag(tagName, beforeTag) == -1)
		{
			printf("Error: Without a finish tag for <%s>.\n", element->get_tag().c_str());
			return -1;
		}


		/*
		//Modiby litz,2006-08-23
		//為什么還要判斷它是否為空?
		if (element->getTextContent().empty() && !beforeTag.empty())
			element->setTextContent(beforeTag.c_str());
			*/
		if (!beforeTag.empty())
			element->setTextContent(beforeTag.c_str());
			
		
		// Is a end-tag?
		if (tagName[0] == '/')
		{
			// Remove the '/' character.
			string end_tagName;
			
			end_tagName = tagName;
			end_tagName.erase(0, 1);
			
			if (element->get_tag() != end_tagName)
			{
				printf("ERROR: Can't find a end tag for <%s>.\n", element->get_tag().c_str());
				return -1;
			}
			
			return 0;
		}

		DOMElement* sub_element = new DOMElement(element);
		if (!sub_element)
			return -1;
		
		// Is it a empty tag?
		if (tagName[tagName.size() - 1] == '/')
		{
			tagName.erase(tagName.size() - 1, 1);
			
			string actualTagName;
			
			int m_AttrNum = ParseAttribute(tagName.c_str(), actualTagName, sub_element->_attribute);
			if(m_AttrNum == -1)
				return -1;
			
			sub_element->set_tag(actualTagName.c_str());
			continue ;
		}

		string actualTagName;
		int m_AttrNum = ParseAttribute(tagName.c_str(), actualTagName, sub_element->_attribute);
		if(m_AttrNum == -1)
				return -1;

		sub_element->set_tag(actualTagName.c_str());
		if (ParseElement(sub_element) != 0)
			return -1;
	}

	printf("Error: without a finish tag for <%s>.\n", element->get_tag().c_str());
	return -1;
}

int DOMDocument::EnumerateElements(LPENUM_CALLBACK_FUNC pFunc,DOMElement* pElectment,void* pRef)
{
	assert(pFunc != NULL);
	if (!pFunc)
		return -1;

	return pElectment->Enumerate(pFunc,pRef);
}

int DOMDocument::ParseRoot()
{
	int tag_start = 0;

	int nPos = 0;
	while((nPos = m_xml.find("?>",nPos)) != string::npos)
	{
		nPos += 2;
		tag_start = nPos;
	}
	
	// 查找根結點的前標簽
	tag_start = m_xml.find("<", tag_start);
			
	// Find the next tag start position (it is the content part finish also).
	if (tag_start == string::npos)
	{
		printf("ERROR: It is not XML Document.\n");
		return -1;
	}
	
	int tag_finish = m_xml.find('>', tag_start);
	if (tag_finish == string::npos || tag_finish - tag_start <= 1)
	{
		printf("ERROR: There is no tag name int the XML root.\n");
		return -1;
	}

	string tagName = m_xml.substr(tag_start + 1, tag_finish - tag_start - 1);
	//如果根結點帶屬性,去掉
	tag_start = tagName.find(" ", 0);
	if (tag_start != string::npos)
	{
		tagName = tagName.substr(0,tag_start);
	}

	m_root.set_tag(tagName.c_str());

	m_pos = tag_finish + 1;

	// 檢驗是否有結束節點
	tag_start = m_xml.rfind( "/" + tagName);
	if (tag_start == string::npos)
	{
		printf("ERROR: Root tag nomatch.\n");
		return -1;
	}
	
	return ParseElement(&m_root);
}

int DOMDocument::ParseAttribute(MLPCSTR tagString, string &tagName, AttributeMap &attribute)
{
	assert(tagString);
	if (!tagString)
		return -1;

	attribute.clear();

	int m_AttrNum = 0;

	string tempString = tagString;

	TRIM_LEFT(tempString);
	TRIM_RIGHT(tempString);

	int firstSpacePos = tempString.find_first_of(" \t\r\n");
	if (firstSpacePos == string::npos)
	{
		tagName = tempString;
		return 0;
	}
	tagName = tempString.substr(0, firstSpacePos);

	int startPos = firstSpacePos + 1;
	int equalPos = tempString.find('=', startPos);
	while (equalPos != string::npos)
	{		
		m_AttrNum ++;

		string attributeValue = "";
		string attributeName = tempString.substr(startPos, equalPos - startPos);
		TRIM_LEFT(attributeName);	
		TRIM_RIGHT(attributeName);

		int leftInvertedCommasPos = tempString.find('\"', equalPos + 1);
		if (leftInvertedCommasPos == string::npos)
		{
			leftInvertedCommasPos = tempString.find('\'', equalPos + 1);
			
			if (leftInvertedCommasPos == string::npos)
			{
				return -1;
			}
		}

		int rightInvertedCommasPos = tempString.find('\"', leftInvertedCommasPos + 1);
		if (rightInvertedCommasPos == string::npos)
		{
			rightInvertedCommasPos = tempString.find('\'', leftInvertedCommasPos + 1);
			if (rightInvertedCommasPos == string::npos)
			{
				return -1;
			}
		}

		attributeValue = tempString.substr(leftInvertedCommasPos + 1, rightInvertedCommasPos - leftInvertedCommasPos - 1);	

		TRIM_LEFT(attributeValue);	
		TRIM_RIGHT(attributeValue);

		attribute.insert(StringPair(attributeName, attributeValue));

		startPos = rightInvertedCommasPos + 1;
		equalPos = tempString.find('=', startPos);
	}

	if (startPos <= tempString.size() - 1)
		return -1;

	return m_AttrNum;
}

DOMElement* DOMDocument::getDocumentElement()
{
	return &m_root;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美中文字幕不卡| 国内精品视频一区二区三区八戒| 99视频精品在线| 中文字幕永久在线不卡| 国产精品一二三四区| 中文字幕免费观看一区| 成人18精品视频| 一区二区三区高清不卡| 欧美日韩一级视频| 久久精品国产免费看久久精品| 日韩欧美国产一二三区| 国产乱人伦偷精品视频免下载| 国产欧美一区二区精品秋霞影院| 91在线云播放| 日韩在线一区二区三区| 精品少妇一区二区三区视频免付费 | 国产婷婷色一区二区三区| 国产精品综合av一区二区国产馆| 国产精品女主播在线观看| 色八戒一区二区三区| 美洲天堂一区二卡三卡四卡视频| 亚洲精品在线免费播放| 99久久精品免费看国产| 午夜精品视频一区| 久久亚洲精精品中文字幕早川悠里| 成人国产一区二区三区精品| 亚洲国产成人av| 国产亚洲一本大道中文在线| 在线观看国产精品网站| 免费久久精品视频| 国产精品视频你懂的| 欧美久久一区二区| 国产成人精品www牛牛影视| 亚洲综合色视频| 久久精品无码一区二区三区| 欧美网站大全在线观看| 国产精品亚洲成人| 亚洲丶国产丶欧美一区二区三区| 久久亚洲私人国产精品va媚药| 一道本成人在线| 韩国精品主播一区二区在线观看 | 亚洲精品视频在线| 精品国产麻豆免费人成网站| 在线日韩国产精品| 国产精品一区在线观看你懂的| 亚洲一区二区影院| 国产日韩综合av| 欧美精品丝袜中出| 91在线你懂得| 国产69精品一区二区亚洲孕妇| 天天亚洲美女在线视频| 国产精品久久久久影视| 精品国产自在久精品国产| 欧美日韩激情在线| 北岛玲一区二区三区四区| 国产一区福利在线| 日韩精品亚洲专区| 亚洲亚洲人成综合网络| 国产精品毛片久久久久久| 欧美精品一区二区三区在线 | 亚洲婷婷综合久久一本伊一区| 精品奇米国产一区二区三区| 欧美在线视频全部完| 99久久精品一区| 成人av午夜影院| 欧美午夜精品久久久久久孕妇| 国产激情一区二区三区| 韩国欧美国产一区| 久久国产视频网| 老汉av免费一区二区三区| 日韩中文字幕亚洲一区二区va在线| 一区二区在线观看视频| 亚洲欧美日韩久久| 中文字幕一区二区三区在线播放 | 久久精品免费看| 五月天激情小说综合| 亚洲在线视频一区| 亚洲影视资源网| 午夜日韩在线观看| 午夜伦理一区二区| 午夜激情久久久| 日日摸夜夜添夜夜添国产精品| 香蕉成人啪国产精品视频综合网| 亚洲v精品v日韩v欧美v专区| 婷婷中文字幕综合| 免费xxxx性欧美18vr| 久久精品国产一区二区| 紧缚捆绑精品一区二区| 激情小说亚洲一区| 国产精品91一区二区| 国产+成+人+亚洲欧洲自线| 成人精品小蝌蚪| 色欧美日韩亚洲| 欧美日韩精品三区| 日韩精品一区二区三区中文精品| 2019国产精品| 国产欧美日韩中文久久| 国产精品高潮呻吟| 亚洲亚洲人成综合网络| 日韩av电影天堂| 国产成人亚洲综合a∨婷婷图片| 粉嫩一区二区三区在线看| 97se亚洲国产综合自在线| 91国产福利在线| 欧美精品777| 亚洲激情中文1区| 丝袜国产日韩另类美女| 激情都市一区二区| 99精品热视频| 91精品国产福利| 久久亚洲二区三区| 亚洲免费大片在线观看| 日韩精品一二三四| 成人午夜又粗又硬又大| 91国产免费观看| 精品粉嫩aⅴ一区二区三区四区| 国产精品久久网站| 日韩国产欧美在线视频| 国产99久久久久久免费看农村| 在线一区二区视频| 精品久久国产老人久久综合| 最近日韩中文字幕| 美女被吸乳得到大胸91| aa级大片欧美| 日韩欧美精品三级| 亚洲男人的天堂在线观看| 免费在线观看精品| 色婷婷激情综合| 精品免费一区二区三区| 一二三区精品视频| 国产成人在线视频播放| 欧美日韩高清在线播放| 中文字幕久久午夜不卡| 日韩va亚洲va欧美va久久| 99久久伊人精品| 欧美va亚洲va国产综合| 亚洲午夜在线电影| 成人激情小说乱人伦| 欧美成人精品高清在线播放| 一区二区在线看| 成人精品免费看| 欧美一二三四区在线| 一区二区三区欧美亚洲| 国产98色在线|日韩| 日韩一区二区三区视频在线| 一区二区三区美女| 成人avav影音| 久久久久国色av免费看影院| 秋霞成人午夜伦在线观看| 欧美影院精品一区| 亚洲欧美一区二区三区极速播放| 欧美丰满一区二区免费视频| 国产精品视频一二三区 | 久久99精品久久久久久动态图| 91福利在线观看| 亚洲视频免费观看| 成人综合在线观看| 久久久高清一区二区三区| 老司机精品视频线观看86| 欧美精品99久久久**| 亚洲成人免费观看| 91福利在线看| 一区二区三区高清在线| 色老头久久综合| 亚洲免费在线观看| 91婷婷韩国欧美一区二区| 国产精品女同互慰在线看| 国产v综合v亚洲欧| 亚洲国产精品99久久久久久久久 | 国产**成人网毛片九色 | 欧美日韩在线精品一区二区三区激情| 国产精品免费av| av不卡一区二区三区| 亚洲欧美在线另类| 一本到不卡免费一区二区| 亚洲免费av高清| 欧美性猛片xxxx免费看久爱| 香蕉乱码成人久久天堂爱免费| 欧美揉bbbbb揉bbbbb| 三级在线观看一区二区| 制服丝袜av成人在线看| 美女一区二区三区| 久久先锋资源网| 成人av在线网站| 亚洲精品日韩一| 欧美久久久久久久久| 毛片av一区二区| 久久久精品人体av艺术| 成人国产精品免费观看视频| 亚洲免费电影在线| 在线播放亚洲一区| 久久er精品视频| 中文无字幕一区二区三区| 欧美成人女星排行榜| 国产精品888| 一区二区三区精品视频在线| 91精品在线麻豆| 国产成人av电影在线观看| 亚洲欧美日韩中文播放| 91精品国产aⅴ一区二区|