利用那几个接口创建一个新的XML文件并且保存,我的信箱是[email protected]或者直接给一个URL也可以
解决方案 »
- 弱弱地问个问题...英文资源字体设置什么好?
- 该死的EXE图标更新问题,终于有点眉目了
- 关于随机数的问题:为什么不"随机"?
- 怎么获取当前窗口的尺寸(右下角的坐标)?
- 有没有一个函数可以直接判定一个文本文件是否为空?
- 分都用完拉!最后100,请问如何将unsigned char[]转成SAFEARRAY,以及如何将SAFEARRAY转回来?
- 请教:当不知道两个变量的类型的时候(可能是string, int, double)时,怎么比其大小
- 我怎么实现:判断当前目录下是否有指定的文件?
- 谁知道http://www.programsalon.com中的源代码光盘的下载地址啊?
- 关于 重绘的问题!!
- loadlibrary后,调用DLL中函数执行数据库校验,校验时间若短,dll可以free,若长,程序在freelibrary处阻塞了!!!
- 请高手解答(在线等待)
#import "msxml4.dll" named_guids
using namespace MSXML2;
inline void linefeed(MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode)
{
pRootNode->appendChild(pXMLDoc->createTextNode("\n"));
}
inline void addTextElement(MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode,LPCTSTR value)
{
pRootNode->appendChild(pXMLDoc->createTextNode(value));
}
void addfile(LPCTSTR filename,MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode)
{
MSXML2::IXMLDOMElementPtr pTempNode = NULL;
pTempNode = pXMLDoc->createElement(_T("file"));
//linefeed(pXMLDoc,pTempNode);
addTextElement(pXMLDoc,pTempNode,filename);
//linefeed(pXMLDoc,pTempNode);
pRootNode->appendChild(pTempNode );
linefeed(pXMLDoc,pRootNode);
}
void savedir(LPCTSTR filename,MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode)
{
if ((GetFileAttributes(filename) & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
MSXML2::IXMLDOMNodePtr pDirNode= NULL;
pDirNode = pRootNode->appendChild(pXMLDoc->createElement(_T("directory")));
// Step 6.3b: Creating RecID attribute for the Record element
MSXML2::IXMLDOMAttributePtr pRecIdAttr = NULL;
pRecIdAttr = pXMLDoc->createAttribute(_T("pathname"));
pRecIdAttr->nodeTypedValue = filename;
pDirNode->attributes->setNamedItem(pRecIdAttr);
linefeed(pXMLDoc,pDirNode); WIN32_FIND_DATA wfd= {0};
char allname[MAX_PATH];
strcpy(allname,filename);
if(filename[strlen(filename)-1]!='\\')
strcat(allname,"\\*.*");
else
strcat(allname,"*.*");
HANDLE hFind = FindFirstFile(allname, &wfd); if (hFind == INVALID_HANDLE_VALUE)
return ;
do
{
if(wfd.cFileName[0]=='.')
continue;
strcpy(allname,filename);
strcat(allname,"\\");
strcat(allname,wfd.cFileName);
if((GetFileAttributes(allname) & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
savedir(allname,pXMLDoc,pDirNode);
}
else
{
addfile(wfd.cFileName,pXMLDoc,pDirNode);
}
}while(FindNextFile(hFind, &wfd));
FindClose(hFind);
}
else
{
addfile(filename,pXMLDoc,pRootNode);
}
linefeed(pXMLDoc,pRootNode);}
void test()
{
MSXML2::IXMLDOMDocument2Ptr pXMLDoc = NULL;
MSXML2::IXMLDOMParseError *pParsingErr = NULL;
MSXML2::IXMLDOMElement *element = NULL;
MSXML2::IXMLDOMNodeList *childs = NULL;
pXMLDoc.CreateInstance("Msxml2.DOMDocument.4.0");
//Creating the Processing Instruction
MSXML2::IXMLDOMProcessingInstructionPtr pPI = NULL;
pPI = pXMLDoc->createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
_variant_t vNullVal;
vNullVal.vt = VT_NULL;
pXMLDoc->insertBefore(pPI, vNullVal);
// Creating the Root Element
MSXML2::IXMLDOMNodePtr pRootNode= NULL;
_variant_t varNodeType((short)MSXML2::NODE_ELEMENT);
pRootNode= pXMLDoc->createNode(varNodeType,
_T("directorysave"), _T(""));
pXMLDoc->appendChild(pRootNode);
linefeed(pXMLDoc,pRootNode);
savedir("c:\\demo1",pXMLDoc,pRootNode);
pXMLDoc->save(_T("c:\\directory.xml"));
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("save directory structure into an xml file, by Onega\n");
CoInitialize(NULL);
test();
CoUninitialize();
return 0;
}
IXMLDOMDocument2 * pXMLDoc;
IXMLDOMNode * pXDN;
//...
hr = CoInitialize(NULL);
if(FAILED(hr))
return ;
// Check the return value, hr...
hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IXMLDOMDocument2, (void**)&pXMLDoc);
if(FAILED(hr))
{
MessageBox("CoCreateInstance Failure");
return ;
}
hr = pXMLDoc->QueryInterface(IID_IXMLDOMNode, (void **)&pXDN);
if(FAILED(hr))
{
MessageBox("QueryInterface XMLDOMNode Failure");
return ;
}// CString str1("xml"),str2("version=\"1.0\" encoding=\"UTF-8\"");
CString str1("xml"),str2("version='1.0' encoding='UTF-8'");
BSTR b1=str1.AllocSysString();
BSTR b2=str2.AllocSysString();
IXMLDOMProcessingInstruction* pXMLProInst=NULL;
hr=pXMLDoc->createProcessingInstruction(b1,b2,&pXMLProInst);
SysFreeString(b1);
SysFreeString(b2);
if(FAILED(hr))
{
MessageBox("createProcessingInstruction Failure");
if(NULL != pXMLProInst)
pXMLProInst->Release();
pXDN->Release();
pXMLDoc->Release();
return ;
}
str1="Node1";
b1=str1.AllocSysString();
hr=pXDN->put_text(b1);
// SysFreeString(b1);
if(FAILED(hr))
{
MessageBox("put node text Failure");
pXMLProInst->Release();
pXDN->Release();
pXMLDoc->Release();
return ;
}
hr=pXMLDoc->appendChild(pXDN,NULL);
if(FAILED(hr))
{
MessageBox("appendChild Failure");
pXMLProInst->Release();
pXDN->Release();
pXMLDoc->Release();
return ;
}
VARIANT var;
var.vt=VT_BSTR;
var.bstrVal=A2BSTR("Test.xml");
hr=pXMLDoc->save(var);
if(FAILED(hr))
{
MessageBox("save Failure");
DWORD d=GetLastError();
pXMLProInst->Release();
pXDN->Release();
pXMLDoc->Release();
return ;
}
pXMLProInst->Release();
pXDN->Release();
pXMLDoc->Release();现在的问题是可以生成XML文档但是用MyIE打开的时候提示XML文档格式不正确,为什么,如何改正
{
XML::IXMLDOMDocumentPtr xmlDoc(__uuidof(DOMDocument));
xmlDoc->async = FALSE;//同步加载XML文件
char szFilePath[]="hxk.xml";
xmlDoc->load(szFilePath);
XML::IXMLDOMElementPtr pDocElement = xmlDoc->GetdocumentElement();
XML::IXMLDOMElementPtr pElement = pDocElement ->selectSingleNode("ShangHai");
AfxMessageBox((_bstr_t)pElement->getAttribute("Weather"));
AfxMessageBox(pElement->Gettext());
//AfxMessageBox(xmlDoc->xml);
}int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
CoInitialize(NULL);
try
{
XML::IXMLDOMDocumentPtr xmlDoc(__uuidof(DOMDocument));
XML::IXMLDOMElementPtr pDocElemt = xmlDoc->createElement("China");
xmlDoc->appendChild(pDocElemt);
XML::IXMLDOMElementPtr pNewDocElemt = xmlDoc ->createElement("Beijing");
pNewDocElemt ->Puttext("-11");
pDocElemt->appendChild(pNewDocElemt);
pNewDocElemt = xmlDoc->createElement("ShangHai");
pNewDocElemt ->Puttext("9");
pNewDocElemt ->setAttribute("Weather",_variant_t("Cloudy"));
pDocElemt ->appendChild(pNewDocElemt); //xmlDoc ->save(_variant_t("d:\\hxk.xml")); ReadXML(); }
catch (_com_error& err)
{
CString strError = "加载XML文件失败";
strError += err.Description();
AfxMessageBox(strError);
} CoUninitialize();
return nRetCode;
}参考参考
可以参考我的xml解析器chamoro.cosoft.org.cn