怎样把内容输出到XML文件?

Anthony Yang 2003-08-20 08:25:30
有什么资料吗?

目的主要是想输出成文本格式,所以用XML是最好的选择了吧?
...全文
34 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
masterz 2003-08-20
  • 打赏
  • 举报
回复
// savedir.cpp : ??????????????
//http://expert.csdn.net/expert/Topicview2.asp?id=1122276
//主  题: 高分求助:是否有C++源代码实现将完整的目录结构保存到单个数据文件中?

/*
<dir name="c:\tmp">
<file> file 1 </file>
<file> file 2 </file>
<dir name="c:\tmp\1">

</dir>

</dir>
*/

#include "stdafx.h"
#include <sstream>
#include <string>
#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));
}
inline void addTabs(MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode,int tabcount)
{
std::ostringstream oss;
for(int i=0;i<tabcount;i++)
oss<<"\t";
addTextElement(pXMLDoc,pRootNode,oss.str().c_str());
}
void addfile(LPCTSTR filename,MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode,int tabcount)
{
MSXML2::IXMLDOMElementPtr pTempNode = NULL;

pTempNode = pXMLDoc->createElement(_T("file"));
linefeed(pXMLDoc,pTempNode);
addTabs(pXMLDoc,pTempNode,tabcount+1);
addTextElement(pXMLDoc,pTempNode,filename);
linefeed(pXMLDoc,pTempNode);
addTabs(pXMLDoc,pTempNode,tabcount);
addTabs(pXMLDoc,pRootNode,tabcount);
pRootNode->appendChild(pTempNode );
linefeed(pXMLDoc,pRootNode);
}
void savedir(LPCTSTR filename,MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode,int tabcount)
{
if ((GetFileAttributes(filename) & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
MSXML2::IXMLDOMNodePtr pDirNode= NULL;

addTabs(pXMLDoc,pRootNode,tabcount);
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,tabcount+1);
}
else
{
addfile(wfd.cFileName,pXMLDoc,pDirNode,tabcount+1);
}
}while(FindNextFile(hFind, &wfd));
FindClose(hFind);
addTabs(pXMLDoc,pDirNode,tabcount);

addTabs(pXMLDoc,pRootNode,tabcount);
}
else
{
addfile(filename,pXMLDoc,pRootNode,tabcount);
}
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,1);
pXMLDoc->save(_T("c:\\directory.xml"));
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("save directory structure into a well formated(with tab and line feed/carriage return) xml file, by Onega\n");
CoInitialize(NULL);
test();
CoUninitialize();
return 0;
}

Hawk_lp 2003-08-20
  • 打赏
  • 举报
回复
up!
Napoleo 2003-08-20
  • 打赏
  • 举报
回复
msxml对象模型
wxfjb 2003-08-20
  • 打赏
  • 举报
回复
直接生成一个xml文件,在做相应的输入就可以了。和写一般的文本文件没有什么区别

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧