檔案load的方式讀取XML
hr = CoCreateInstance(CLSID_DOMDocument, NULL,CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,IID_IXMLDOMDocument, (LPVOID*)&m_piLib);
if (!m_piLib) {
return false;
}
VARIANT_BOOL varOkay;
// VARIANT vXMLSrc,vXMLSrc1;
// VariantInit(&vXMLSrc);
// VariantInit(&vXMLSrc1);
// CFileStream *fs=new CFileStream;
// BSTR bsLP=CString("//儲存卡//eGistarXLite//linepatt.htm").AllocSysString();
// BSTR bsLP1=CString("//儲存卡//eGistarXLite//save.htm").AllocSysString();
// if (!fs->open(strPathName,true))
// {
// return false;
// }
// vXMLSrc.punkVal = fs;
// vXMLSrc.vt = VT_UNKNOWN;
//vXMLSrc.bstrVal=bsLP;
//vXMLSrc.vt=VT_BSTR;
//vXMLSrc1.bstrVal=bsLP1;
//vXMLSrc1.vt=VT_BSTR;
//m_piLib->load(vXMLSrc,&varOkay);
用資源loadxml方式讀取XML注意點:
查詢pocketpc2003協助檔案發現loadxml下的一段備忘:The loadXML will work only with UTF-16 or UCS-2 encodings;這段話的意思是說明encodings為utf-16,而不是說你一定要在UTF-16下進行編寫XML;所以最好不要用visual studio2005中的資源編輯器。你可以用記事本編輯,然後把檔案匯入到資源中。另外檔案頭中的必須有<?xml version="1.0" encoding="UTF-16"?>
最後希望在檔案結束後添加幾個空格;
CeGistarXLiteApp * pApp=(CeGistarXLiteApp*)AfxGetApp();
HMODULE hM = pApp->m_hInstance;
HRSRC hsLP;
HGLOBAL hLP;
char * pLP;
hsLP=::FindResource(hM,MAKEINTRESOURCE(IDR_HTML1),MAKEINTRESOURCE(23));
if (!hsLP) return false;
hLP=LoadResource(hM,hsLP);
pLP=(char *)LockResource(hLP);
BSTR bstr=CString(pLP).AllocSysString();
m_piLib->put_async(VARIANT_FALSE);
m_piLib->loadXML(bstr,&varOkay);
IXMLDOMElement* piLibElt=NULL;
BSTR nodeName;
if (varOkay) {
hr = m_piLib->get_documentElement(&piLibElt);
if (FAILED(hr) || piLibElt == NULL) {
return FALSE;
}
CString strT1,strT2,strT3;
IXMLDOMNodeList *piStyles;
piLibElt->selectNodes(L"*[@name!='']",&piStyles);
IXMLDOMNode *piStyle;
for(piStyles->nextNode(&piStyle);piStyle!=NULL;piStyles->nextNode(&piStyle))
{
piStyle->get_baseName(&nodeName);
strT1=nodeName;
if (strT1=="LinePattern")
{
CGSLLinePattern LP;
LP.Init((IXMLDOMElement *)piStyle);
m_LinePatterns.push_back(LP);
}
}
}