XML
有人可以给我份简单的XML读写代码吗
[解决办法]
// XML.cpp : Defines the entry point for the console application.
//
#include "stdafx.h "
#include <iostream>
//#include "afxcmn.h "
#include <comutil.h>
#include <MsXml.h>
#include <MsXml2.h>
//#import <msxml.dll> named_guids
int _tmain(int argc, _TCHAR* argv[])
{
/*
MSXML::IXMLDOMDocumentPtr m_plDomDocument = NULL;
MSXML::IXMLDOMElementPtr m_pDocRoot = NULL;
HRESULT hr = ::CoInitialize(NULL);
if (FAILED(hr))
{
return 0;
}
hr = m_plDomDocument.CreateInstance(MSXML::CLSID_DOMDocument);
if(FAILED(hr))
{
return 0;
}
WCHAR szPath[MAX_PATH];
wsprintf(szPath, _TEXT( "%s "), _TEXT( "d:\\hh.xml "));
variant_t vResult;
vResult = m_plDomDocument-> load(szPath);
if(((bool)vResult) == TRUE)
{
_bstr_t bstrDocContents = m_plDomDocument-> xml;
m_pDocRoot = m_plDomDocument-> documentElement;
for(MSXML::IXMLDOMNodePtr pChild = m_pDocRoot-> firstChild;
pChild != NULL;
pChild = pChild-> nextSibling)
{
LPCTSTR pcszText = NULL;
if(MSXML::NODE_TEXT == pChild-> nodeType)
pcszText = (LPCTSTR)pChild-> text;
else
pcszText = (LPCTSTR)pChild-> nodeName;
wprintf(_TEXT( "%s\n "), pcszText);
}
}
*/
//ISAXXMLReader IID_ISAXXMLReader
IXMLDOMDocument *pXml = NULL;
IXMLDOMElement *pRoot = NULL;
HRESULT hr = E_FAIL;
hr = ::CoInitialize(NULL);
if (FAILED(hr))
{
return 0;
}
hr = ::CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPROC_SERVER,IID_IXMLDOMDocument,(void**)&pXml);
if (FAILED(hr))
{
::CoUninitialize();
return 0;
}
/*
WCHAR szPath[MAX_PATH];
wsprintf(szPath, _TEXT( "%s "), _TEXT( " <a> <b> c = 5 </b> </a> "));
VARIANT_BOOL vbSuccess = false;
hr = pXml-> loadXML(szPath, &vbSuccess);
if (FAILED(hr))
{
pXml-> Release();
::CoUninitialize();
return 0;
}
*/
_variant_t var = _T( "false ");
bool bVar = (bool)(var);
var = _T( "1345 ");
int nVar = (int)(var);
var = _T( "1345.724 ");
float fVar = (float)(var);
_bstr_t szVar = var;
VARIANT_BOOL vbSuccess = false;
_variant_t varString = _T( "d:\\hh.xml ");
hr = pXml-> load(varString, &vbSuccess);
if (FAILED(hr))
{
pXml-> Release();
::CoUninitialize();
return 0;
}
hr = pXml-> get_documentElement(&pRoot);
if (FAILED(hr))
{
pXml-> Release();
::CoUninitialize();
return 0;
}
IXMLDOMNode *pChild = NULL;
hr = pRoot-> get_firstChild(&pChild);
while (SUCCEEDED(hr) && pChild)
{
DOMNodeType nType = NODE_INVALID;
HRESULT hRet = pChild-> get_nodeType(&nType);
if (SUCCEEDED(hRet))
{
BSTR pszText = NULL;
if(NODE_TEXT == nType)
pChild-> get_text(&pszText);
else
pChild-> get_nodeName(&pszText);
IXMLDOMNamedNodeMap *pAttributeMap = NULL;
pChild-> get_attributes(&pAttributeMap);
if (pAttributeMap)
{
IXMLDOMNode *pNode = NULL;
pAttributeMap-> getNamedItem(_TEXT( "value "), &pNode);
if (pNode)
{
BSTR pszA = NULL;
DOMNodeType nAttributeType = NODE_INVALID;
pNode-> get_nodeType(&nAttributeType);
pNode-> get_text(&pszA);
VARIANT dataTypeName;
pNode-> get_dataType(&dataTypeName);
VARIANT value;
value.vt = VT_INT;
pNode-> get_nodeValue(&value);
wprintf(_TEXT( "\t%s\n "), pszA);
}
}
wprintf(_TEXT( "%s\n "), pszText);
}
hr = pChild-> get_nextSibling(&pChild);
}
pXml-> Release();
::CoUninitialize();
return 0;
}
class MyContent : public ISAXContentHandler
{
public:
MyContent(); // 定义建立函数和解除函数。
virtual ~MyContent();
// 从 ISAXContentHandler 复制所有的方法。
// 接口...
virtual HRESULT STDMETHODCALLTYPE StartDocument(void);
virtual HRESULT STDMETHODCALLTYPE EndDocument(void);
virtual HRESULT STDMETHODCALLTYPE StartPrefixMapping(const
wchar_t __RPC_FAR *pwchPrefix,int cchPrefix,const
wchar_t __RPC_FAR *pwchUri,int cchUri);
// ...和底层的 IUnknown 接口...
long __stdcall QueryInterface(const struct _GUID &,void ** );
unsigned long __stdcall AddRef(void);
unsigned long __stdcall Release(void);
// ...和添加任何内容来简化实现。
private:
void prt ( char * pszFmt, const wchar_t __RPC_FAR *pwchVal, int
cchVal);
};
void SaxReader()
{
ISAXContentHandler *pXmlHander = NULL;
ISAXXMLReader *pXml = NULL;
HRESULT hr = ::CoCreateInstance(CLSID_SAXXMLReader,NULL,CLSCTX_INPROC_SERVER,IID_ISAXXMLReader,(void**)&pXml);
hr = pXml-> QueryInterface(IID_ISAXContentHandler, (void**)&pXmlHander);
}
[解决办法]
给你个简单的Cmarkup的代码吧,比较好用
http://blog.csdn.net/aqua_aqua/archive/2005/06/24/402260.aspx