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