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

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

?? cxmlwrapper.cpp

?? wince ImageViewer_Skinned
?? CPP
字號:
//
// CXmlWrapper.cpp
//
// --------------------------------------------------------
// A Practical Guide to Script-Driven Software Development
// Author: Qiming Lu                        Date: 6/1/2006
// MSN Messager: luqiming26@hotmail.com
// MSN Blog: http://spaces.msn.com/jemylu
// --------------------------------------------------------

#include "stdafx.h"
#include "CXmlWrapper.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////////////////
CXmlWrapper::CXmlWrapper() : mDocNode(0), mRootNode(0)
{
	// CXmlWrapper serves as xml writer...
	HRESULT hr = CoCreateInstance(__uuidof(DOMDocument), NULL, CLSCTX_INPROC_SERVER,
		__uuidof(IXMLDOMDocument), (void**)&mDocNode);
	if (SUCCEEDED(hr))
	{
		// Create a root node.
		mRootNode = CreateNode("myRoot");
		if (mRootNode)
		{
			SetNodeAttr(mRootNode, "specVersion", 0.1);
			InsertNode(mDocNode, mRootNode);
		}
	}
}

CXmlWrapper::CXmlWrapper(const char * inXmlFile) : mDocNode(0), mRootNode(0)
{
	// CXmlWrapper serves as xml reader...
	LoadFile(inXmlFile);
}

CXmlWrapper::~CXmlWrapper()
{
	Clean();
}

void CXmlWrapper::Clean()
{
	if (mRootNode)
	{
		mRootNode->Release();
		mRootNode = 0;
	}
	if (mDocNode)
	{
		mDocNode->Release();
		mDocNode = 0;
	}
}

bool CXmlWrapper::LoadFile(const char * inXmlFile)
{
	Clean();
	SetFileName(inXmlFile);

	HRESULT hr = CoCreateInstance(__uuidof(DOMDocument), NULL, CLSCTX_INPROC_SERVER,
		__uuidof(IXMLDOMDocument), (void**)&mDocNode);
	if (!SUCCEEDED(hr) || !mDocNode)
	{
		Clean();
		return false;
	}

	VARIANT_BOOL     vt_b;
	hr = mDocNode->load(_variant_t(mXmlFile), &vt_b);
	if (!SUCCEEDED(hr) || !vt_b)
	{
		Clean();
		return false;
	}

	// Retrieve the root node.
	IXMLDOMElement * pElem = 0;
	hr = mDocNode->get_documentElement(&pElem);
	if (!SUCCEEDED(hr) || !pElem)
	{
		Clean();
		return false;
	}
	if (!Element2Node(&mRootNode, pElem))
	{
		Clean();
		pElem->Release();
		return false;
	}

	pElem->Release();
	return true;
}

bool CXmlWrapper::SaveFile()
{
	// If xml file does not exist, here create one first.
	HANDLE hFile = CreateFile(mXmlFile,            // The filename
							GENERIC_WRITE,         // File access
							(DWORD) 0,             // Share access
							NULL,                  // Security
							OPEN_ALWAYS,           // Open flags
							(DWORD) 0,             // More flags
							NULL);                 // Template
	if (hFile != INVALID_HANDLE_VALUE)
	{
		CloseHandle(hFile);
	}

	if (mDocNode)
	{
		HRESULT hr = mDocNode->save(_variant_t(mXmlFile));
		return SUCCEEDED(hr);
	}
	return false;
}

bool CXmlWrapper::SaveFile(const char * inXmlFile)
{
	SetFileName(inXmlFile);
	return SaveFile();
}

bool CXmlWrapper::SetFileName(const char * inXmlFile)
{
	mXmlFile = inXmlFile;
	return true;
}

bool CXmlWrapper::IsReady()
{
	if (mRootNode && mDocNode)
		return true;
	return false;
}

IXMLDOMNode* CXmlWrapper::CreateNode(BSTR inNodeName, DOMNodeType inNodeType)
{
	if (inNodeType == NODE_TEXT)
	{
		IXMLDOMText * t = NULL;
		mDocNode->createTextNode(inNodeName, &t);
		return t;
	}
	else if (inNodeType == NODE_CDATA_SECTION)
	{
		IXMLDOMCDATASection * t = NULL;
		mDocNode->createCDATASection(inNodeName, &t);
		return t;
	}
	else if (inNodeType == NODE_PROCESSING_INSTRUCTION)
	{
		_bstr_t bstr1("xml");
		IXMLDOMProcessingInstruction * ins = NULL;
		mDocNode->createProcessingInstruction(bstr1, inNodeName, &ins);
		return ins;
	}
	else
	{
		ASSERT(inNodeType == NODE_ELEMENT);

		VARIANT var;
		var.vt     = VT_I4;
		V_I4(&var) = (int)inNodeType;

		IXMLDOMNode * node = NULL;
 		mDocNode->createNode(var, inNodeName, NULL, &node);
		return node;
	}
}

IXMLDOMNode* CXmlWrapper::CreateNode(const char * inNodeName, DOMNodeType inNodeType)
{
	IXMLDOMNode * node = NULL;

	CString nodeName(inNodeName);
	BSTR bstrName = nodeName.AllocSysString();
	if (bstrName)
	{
		node = CreateNode(bstrName, inNodeType);
		::SysFreeString(bstrName);
	}
	return node;
}

bool CXmlWrapper::InsertNode(IXMLDOMNode * inParentNode, IXMLDOMNode * inSonNode)
{
	IXMLDOMNode * tmp = NULL;
	HRESULT hr = inParentNode->appendChild(inSonNode, &tmp);
	if (tmp)
	{
		tmp->Release();
	}
	return SUCCEEDED(hr);
}

bool CXmlWrapper::RemoveNode(IXMLDOMNode * inParentNode, IXMLDOMNode * inSonNode)
{
	IXMLDOMNode * tmp = NULL;
	HRESULT hr = inParentNode->removeChild(inSonNode, &tmp);
	if (tmp)
	{
		tmp->Release();
	}
	return SUCCEEDED(hr);
}

// Insert a node under root, which named inNodeName and has inNodeText as text
bool CXmlWrapper::InsertNodeEx(const char * inNodeName, const char * inNodeText, IXMLDOMNode * inParentNode /*= NULL*/)
{
	IXMLDOMNode* pNode = CreateNode(inNodeName, NODE_ELEMENT);
	if (!pNode)
	{
		return false;
	}	

	if (!SetNodeText(pNode, inNodeText))
	{
		pNode->Release();
		return false;
	}

	if (!InsertNode(mRootNode, pNode))
	{
		pNode->Release();
		return false;
	}
	return true;
}

CString CXmlWrapper::GetNodeAttr(IXMLDOMNode * inNode, const char * inAttr)
{
	IXMLDOMElement* pEle = NULL;
	if (!Node2Element(&pEle, inNode))
	{
		return CString("");
	}

	_variant_t vt;
	CString attrName(inAttr), strValue("");
	BSTR bstrName = attrName.AllocSysString();
	if (pEle->getAttribute(bstrName, &vt) == S_OK)
	{
		strValue = CString(vt.bstrVal);
	}
	pEle->Release();
	::SysFreeString(bstrName); 
	return strValue;
}

bool CXmlWrapper::SetNodeAttr(IXMLDOMNode* inNode, const char * inAttr, _variant_t vVal)
{
	IXMLDOMElement* pEle = NULL;
	if (!Node2Element(&pEle, inNode))
	{
		return false;
	}

	CString attrName(inAttr);
	BSTR bstrName = attrName.AllocSysString();
	HRESULT hr = pEle->setAttribute(bstrName, vVal);
	pEle->Release();
	::SysFreeString(bstrName); 
	return SUCCEEDED(hr);
}

bool CXmlWrapper::SetNodeAttr(IXMLDOMNode* inNode, const char * inAttr, char * szVal)
{
	return SetNodeAttr(inNode, inAttr, _variant_t(szVal));
}

bool CXmlWrapper::SetNodeAttr(IXMLDOMNode* inNode, const char * inAttr, const char * szVal)
{
	return SetNodeAttr(inNode, inAttr, (char *)szVal);
}

bool CXmlWrapper::SetNodeAttr(IXMLDOMNode* inNode, const char * inAttr, double dblVal)
{
	VARIANT var;
	var.vt     = VT_R8;
	var.dblVal = dblVal;
	return SetNodeAttr(inNode, inAttr, var);
}

bool CXmlWrapper::SetNodeAttr(IXMLDOMNode* inNode, const char * inAttr, long nVal)
{
	VARIANT var;
	var.vt     = VT_I4;
	var.intVal = nVal;
	return SetNodeAttr(inNode, inAttr, var);
}

bool CXmlWrapper::SetNodeAttr(IXMLDOMNode* inNode, const char * inAttr, unsigned int nVal)
{
	return SetNodeAttr(inNode, inAttr, (long)nVal);
}

bool CXmlWrapper::SetNodeAttr(IXMLDOMNode* inNode, const char * inAttr, int nVal)
{
	return SetNodeAttr(inNode, inAttr, (long)nVal);
}

bool CXmlWrapper::SetNodeAttr(IXMLDOMNode* inNode, const char * inAttr, unsigned long nVal)
{
	return SetNodeAttr(inNode, inAttr, (long)nVal);
}

CString CXmlWrapper::GetNodeName(IXMLDOMNode * inNode)
{
	CString strName("");
	if (inNode)
	{	
		BSTR bstrName = 0;
		inNode->get_nodeName(&bstrName);
		if (bstrName)
		{
			strName = CString(bstrName);
			SysFreeString(bstrName); 
		}
	}
	return strName;
}

bool CXmlWrapper::SetNodeText(IXMLDOMNode* inNode, const char * inText)
{
	IXMLDOMNode * pNode = CreateNode(inText, NODE_TEXT);
	if (pNode)
	{
		if (InsertNode(inNode, pNode))
		{
			return true;
		}
	}
	return false;
}

CString CXmlWrapper::GetNodeText(IXMLDOMNode* inNode)
{
	IXMLDOMElement* pEle = NULL;
	if (!Node2Element(&pEle, inNode))
	{
		return CString("");
	}

	CString strText("");
	BSTR bstrText = 0;
	if (pEle->get_text(&bstrText) == S_OK)
	{
		strText = CString(bstrText);
	}
	SysFreeString(bstrText); 
	pEle->Release();
	return strText;
}

CString CXmlWrapper::GetNodeTextEx(const char * inNodeName, IXMLDOMNode * inParentNode)
{
	if (!inParentNode)
	{
		inParentNode = mRootNode;
	}

	IXMLDOMNode * pNode = GetNodeSubNode(inParentNode, inNodeName);
	return GetNodeText(pNode);
}

IXMLDOMNode* CXmlWrapper::GetNodeFirstChild(IXMLDOMNode * inNode)
{
	if (!inNode)
	{
		mRootNode->AddRef();
		return mRootNode;
	}

	IXMLDOMNode * pNode = NULL;
	inNode->get_firstChild(&pNode);
	return pNode;
}

IXMLDOMNode* CXmlWrapper::GetNodeNextSibling(IXMLDOMNode * inNode)
{
	IXMLDOMNode * pNode = NULL;
	if (inNode)
	{
		inNode->get_nextSibling(&pNode);
	}
	return pNode;
}

IXMLDOMNode* CXmlWrapper::GetNodeLastChild(IXMLDOMNode * inNode)
{
	IXMLDOMNode * pNode = NULL;
	if (inNode)
	{
		inNode->get_lastChild(&pNode);
	}
	return pNode;
}

IXMLDOMNode* CXmlWrapper::GetNodePreviousSibling(IXMLDOMNode * inNode)
{
	IXMLDOMNode * pNode = NULL;
	if (inNode)
	{
		inNode->get_previousSibling(&pNode);
	}
	return pNode;
}

bool CXmlWrapper::GetNodeSubNodeList(DOMNodeList * outNodeList,
									 IXMLDOMNode * inParentNode, 
									 const char * inWhatName)
{
	bool ret = false;
	IXMLDOMNodeList * tmpList = NULL;
	if (SUCCEEDED(inParentNode->get_childNodes(&tmpList)))
	{
		IXMLDOMNode * pNode = NULL;
		while ((tmpList->nextNode(&pNode) == S_OK) && pNode)
		{
			if ((!inWhatName) || (GetNodeName(pNode) == inWhatName))
			{
				outNodeList->Add(pNode);
				ret = true;
			}
		}

		tmpList->Release();
	}
	return ret;
}

IXMLDOMNode* CXmlWrapper::GetNodeSubNode(IXMLDOMNode * inParentNode, const char * inWhatName)
{
	IXMLDOMNodeList * tmpList = NULL;
	if (SUCCEEDED(inParentNode->get_childNodes(&tmpList)))
	{
		IXMLDOMNode * pNode = NULL;
		while (tmpList->nextNode(&pNode) == S_OK)
		{
			if (GetNodeName(pNode) == inWhatName)
			{
				tmpList->Release();
				return pNode;
			}
		}

		tmpList->Release();
	}
	return NULL;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区电影在线| 欧美一区二区福利视频| 日韩高清不卡在线| 久久久久久久久久久久久女国产乱 | 老汉av免费一区二区三区| 国产亚洲一区字幕| 欧美日韩精品三区| 不卡视频免费播放| 久久97超碰国产精品超碰| 亚洲综合久久av| 国产精品免费aⅴ片在线观看| 91精品黄色片免费大全| 日本精品一区二区三区高清| 国产成人在线影院 | 久久99国产精品久久99| 亚洲夂夂婷婷色拍ww47| 中文字幕视频一区| 久久久久久久久久看片| 日韩欧美视频在线 | 国产精品免费免费| 欧美不卡在线视频| 91精品国产黑色紧身裤美女| 91黄色免费观看| 成人av电影免费观看| 国产精品一线二线三线精华| 麻豆精品视频在线观看免费 | 美腿丝袜亚洲三区| 亚洲18影院在线观看| 亚洲一区二区偷拍精品| 一区二区三区四区亚洲| 成人欧美一区二区三区黑人麻豆| 国产清纯在线一区二区www| 久久蜜桃av一区精品变态类天堂| 日韩精品一区二区三区在线播放| 欧美一区二区免费| 欧美精品国产精品| 欧美精品国产精品| 日韩一区二区视频| 日韩欧美中文一区| 日韩欧美国产一二三区| 欧美成人性福生活免费看| 91精品国产综合久久久久久久久久| 欧美视频日韩视频在线观看| 在线一区二区三区| 欧美偷拍一区二区| 欧美日本不卡视频| 欧美一区中文字幕| 欧美xxxx老人做受| 精品国产乱码久久久久久影片| 欧美大片拔萝卜| 久久精品夜色噜噜亚洲a∨| 国产日韩av一区二区| 成人免费小视频| 一区二区三国产精华液| 亚洲电影中文字幕在线观看| 亚洲国产精品自拍| 蜜桃视频在线观看一区二区| 久久成人久久爱| 国产馆精品极品| av不卡一区二区三区| 91福利精品第一导航| 717成人午夜免费福利电影| 欧美成va人片在线观看| 国产精品系列在线| 亚洲一二三级电影| 久久精品久久99精品久久| 国产成人在线电影| 一本到高清视频免费精品| 制服丝袜日韩国产| 久久久精品国产免大香伊| 亚洲麻豆国产自偷在线| 日韩国产一二三区| 国产精品白丝av| 色就色 综合激情| 日韩视频一区在线观看| 国产欧美精品一区| 亚洲福利一二三区| 国产乱人伦偷精品视频不卡| 一本色道久久综合亚洲精品按摩 | 亚洲女与黑人做爰| 日本va欧美va瓶| 成人黄色在线视频| 91精品国产入口在线| 国产精品三级视频| 日韩av成人高清| caoporn国产精品| 91精品国产色综合久久| 亚洲欧洲日产国码二区| 久久aⅴ国产欧美74aaa| 一本大道综合伊人精品热热| 精品久久久久久亚洲综合网 | 一区二区中文字幕在线| 日韩 欧美一区二区三区| www.亚洲激情.com| 欧美一区午夜精品| 一区二区在线观看免费视频播放| 久久成人18免费观看| 欧洲国产伦久久久久久久| 亚洲国产成人在线| 免费三级欧美电影| 欧亚一区二区三区| 国产精品每日更新在线播放网址| 麻豆视频观看网址久久| 91极品美女在线| 亚洲欧洲国产日韩| 极品销魂美女一区二区三区| 欧美三级欧美一级| 国产精品高潮呻吟久久| 国产精品主播直播| 欧美成人综合网站| 石原莉奈在线亚洲三区| 91久久精品国产91性色tv| 中文av一区二区| 精品一区二区三区影院在线午夜 | 日本亚洲一区二区| 欧美在线制服丝袜| 综合av第一页| av激情综合网| 国产精品网友自拍| 国产高清不卡一区| 久久久精品欧美丰满| 激情欧美一区二区| 日韩视频一区二区三区在线播放| 亚洲亚洲精品在线观看| 欧洲日韩一区二区三区| 一区二区三区波多野结衣在线观看| 成人av影院在线| 17c精品麻豆一区二区免费| 丁香婷婷综合五月| 亚洲国产精品av| 国产v日产∨综合v精品视频| 国产色产综合产在线视频| 国产一区在线精品| 久久精品免费在线观看| 国产伦理精品不卡| 国产女同性恋一区二区| 成人亚洲精品久久久久软件| 久久精品网站免费观看| 国产福利精品一区| 日本一区二区成人| aaa欧美日韩| 亚洲人妖av一区二区| 91浏览器打开| 亚洲综合成人在线| 欧美日韩一区不卡| 美日韩一区二区三区| 日韩精品一区二区三区在线观看| 精品无人码麻豆乱码1区2区 | 国产一区二区免费在线| 久久―日本道色综合久久| 国产精品亚洲专一区二区三区 | 亚洲乱码国产乱码精品精的特点| 91麻豆国产自产在线观看| 亚洲女人的天堂| 欧美日韩精品三区| 久久精品国产精品亚洲综合| 久久影音资源网| 91一区二区在线观看| 爽好多水快深点欧美视频| 日韩欧美国产一二三区| 国产精品自在在线| 综合久久久久综合| 欧美日韩国产另类一区| 精品写真视频在线观看| 国产精品美女久久久久久久久久久 | 成人免费高清视频在线观看| 亚洲色图欧美激情| 欧美日本在线看| 国产另类ts人妖一区二区| 国产精品二区一区二区aⅴ污介绍| av午夜一区麻豆| 日韩不卡一区二区三区| 久久九九99视频| 欧美少妇一区二区| 久久成人久久爱| 亚洲精品国产精华液| 日韩精品综合一本久道在线视频| 成人激情午夜影院| 视频一区视频二区在线观看| 久久久久国产免费免费| 日韩免费观看2025年上映的电影 | 午夜视频久久久久久| 日韩色在线观看| 国产成人aaa| 亚洲高清免费在线| 337p粉嫩大胆色噜噜噜噜亚洲| 99riav一区二区三区| 久久国产成人午夜av影院| 国产精品久久久久影院老司| 欧美人妖巨大在线| www..com久久爱| 久久精品国产99久久6| 粉嫩aⅴ一区二区三区四区五区| 亚洲码国产岛国毛片在线| 26uuu国产电影一区二区| 在线一区二区三区| 成人高清视频在线观看| 激情五月激情综合网| 亚洲国产成人av| 中文字幕日韩一区|