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

📄 myxml.cpp

📁 ARM2410基于wince4.2平台的xml文档操作。包括基本的读取、保存等。此实例是读取SD卡上的xml文档
💻 CPP
字号:
// MYXML.cpp: implementation of the CMYXML class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "xml.h"
#include "MYXML.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMYXML::CMYXML()
{

}

CMYXML::~CMYXML()
{
	m_iXMLDoc  =  NULL;
	::CoUninitialize();
}

void CMYXML::DisplayChild(IXMLDOMElement* pChild )
{
	BSTR nodeType, nodeName;
	pChild->get_nodeTypeString(&nodeType);
	pChild->get_nodeName(&nodeName);

	if(wcscmp(nodeName,L"node") == 0 )
	{
		CString strAttrib = ParseXML(pChild);
		if(!strAttrib.IsEmpty())
		{
			CString strAtt;
			int item = 0;
			do 
			{
				strAtt = GetAttributes(strAttrib);
				if(!strAtt.IsEmpty())
				{
					switch(item)
					{
					case 0:
						AfxMessageBox(strAtt);
						break;
					case 1:
						AfxMessageBox(strAtt);
						break;
					}
					item++;
				}
			} while(!strAtt.IsEmpty());
		}
	}
}

BOOL CMYXML::LoadXML(LPCTSTR szPath)
{
	BOOL bInit = TRUE;

	if( m_iXMLDoc )
		m_iXMLDoc.Detach();

	m_iXMLDoc.CoCreateInstance( __uuidof( DOMDocument ) );
	
	m_iXMLDoc->put_async( VARIANT_FALSE );
	CComQIPtr<IObjectSafety,&IID_IObjectSafety> iSafety( m_iXMLDoc );
	if ( iSafety ) 
	{ 
		DWORD dwSupported, dwEnabled; 
		iSafety->GetInterfaceSafetyOptions( IID_IXMLDOMDocument, &dwSupported, &dwEnabled );
		iSafety->SetInterfaceSafetyOptions( IID_IXMLDOMDocument, dwSupported, 0 );
	}


	VARIANT_BOOL bSuccess=false;
	// Can load it from a url/filename...
	HRESULT hr = m_iXMLDoc->load( CComVariant ( szPath ), &bSuccess );
	if( FAILED( hr ) )
	{
		MessageBox( NULL, L"Cannot load XML file", L"Error Loading XML", MB_ICONSTOP );
		return FALSE;
	}
	if(bSuccess) 
		return true;
	else// Lets give some errors as to why we cannot validate the XML supplied to us
	{
		long line, linePos;
		BSTR reason = NULL;
		IXMLDOMParseError* parseError = NULL;

		m_iXMLDoc->get_parseError( &parseError );
		parseError->get_errorCode( &hr );
		parseError->get_line( &line );
		parseError->get_linepos( &linePos );
		parseError->get_reason( &reason );
		
		CString strMsg;
		strMsg.Format( L"Error 0x%.8X on line %d, position %d\r\nReason: %s", hr, line, linePos, CString( reason ) );
		MessageBox( NULL, strMsg, L"Error Loading XML", MB_ICONWARNING );
		SysFreeString( reason );
	}
	return false;
}


IXMLDOMNode * CMYXML::FindNode(LPCTSTR szURL)
{
	IXMLDOMNode *spXMLNode = NULL;
	HRESULT hr;
	hr = m_iXMLDoc->selectSingleNode((TCHAR *)szURL,&spXMLNode);
	if( FAILED( hr )  )  // Empty xml file
	{
		MessageBox( NULL, L"Node is not found!", L"Error finding XML", MB_ICONSTOP );
		return NULL;		
	}
	return spXMLNode;
}


IXMLDOMNodeList * CMYXML::FindNodeList(LPCTSTR szURI)
{
	IXMLDOMNodeList *XMLNodeList =NULL;
	HRESULT hr;
	hr = m_iXMLDoc->selectNodes((TCHAR *)szURI,&XMLNodeList);
	if (hr == S_OK)
	{
		return XMLNodeList;
	}
	else
	{
		AfxMessageBox(L"NodeList is not found!");
	}
	return NULL;
	
}

BOOL CMYXML::AddNode(LPCTSTR szURI)
{
	IXMLDOMNode *pNode = NULL;
	IXMLDOMNode *newNode = NULL;
	IXMLDOMNode *mNode = NULL;
	IXMLDOMNode *newChild1 = NULL;
	IXMLDOMNode *newChild2 = NULL;
	IXMLDOMNode *newChild3 = NULL;
	IXMLDOMNode *newChild4 = NULL;
	IXMLDOMNode *newChild5 = NULL;
	IXMLDOMText *nodeText = NULL;
	IXMLDOMNode *nNode = NULL;
	pNode = FindNode(szURI);
	m_iXMLDoc->createNode(CComVariant(NODE_ELEMENT),CComBSTR("node"),L"",&newNode);
	m_iXMLDoc->createNode(CComVariant(NODE_ELEMENT),CComBSTR("SID"),L"",&newChild1);
	m_iXMLDoc->createNode(CComVariant(NODE_ELEMENT),CComBSTR("SName"),L"",&newChild2);
	m_iXMLDoc->createNode(CComVariant(NODE_ELEMENT),CComBSTR("SM"),L"",&newChild3);
	m_iXMLDoc->createNode(CComVariant(NODE_ELEMENT),CComBSTR("SStar"),L"",&newChild4);
	m_iXMLDoc->createNode(CComVariant(NODE_ELEMENT),CComBSTR("SEnd"),L"",&newChild5);	
	m_iXMLDoc->createTextNode(CComBSTR("5"),&nodeText);
	newNode->appendChild(newChild1,&mNode);
	mNode->appendChild(nodeText,&nNode);
	newNode->appendChild(newChild2,&mNode);
	newNode->appendChild(newChild3,&mNode);
	newNode->appendChild(newChild4,&mNode);
	newNode->appendChild(newChild5,&mNode);
	pNode->appendChild(newNode,&mNode);

	if(pNode!= NULL)
	{
		return true;
	}
	return false;
  
}

BOOL CMYXML::SaveXML(LPCTSTR szPath)
{
	HRESULT hr;
	hr = m_iXMLDoc->save(CComVariant(szPath));
	if(hr == S_OK)
		return true;
	return false;
}

⌨️ 快捷键说明

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