xml文件和txt文件相同,使用普通的文本操作函数即可读取。
1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。
2、例程:
#include<stdio.h>int a
char b,c[100]
int main(){
FILE * fp1 = fopen("input.xml", "r")//打开xml格式输入文件
FILE * fp2 = fopen("output.txt", "w")//打开输出文件
if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出
puts("不能打开文件!")
rturn 0
}
fscanf(fp1,"%d",&a)//从输入文件读取一个整数
b=fgetc(fp1)//从输入文件读取一个字符
fgets(c,100,fp1)//从输入文件读取一行字符串
printf("%ld",ftell(fp1))//输出fp1指针当前位置相对于文件首的偏移字节数
fputs(c,fp2)//向输出文件写入一行字符串
fputc(b,fp2)//向输出文件写入一个字符
fprintf(fp2,"%d",a)//向输出文件写入一个整数
fclose(fp1)//关闭输入文件
fclose(fp2)//关闭输出文件,相当于保存
return 0
}
用VC吧,下面有一个例子,你参照下:
void CreateXml(){
CoInitialize(NULL)
// 创建文档
MSXML2::IXMLDOMDocument2Ptr pXMLDoc = NULL
//创建DOMDocument对象
HRESULT hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument))
if (!SUCCEEDED(hr))
{
return
}
// Create the Processing Instruction
MSXML2::IXMLDOMProcessingInstructionPtr pXMLProc = NULL
pXMLProc = pXMLDoc->createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
_variant_t vNullVal
vNullVal.vt = VT_NULL
pXMLDoc->insertBefore(pXMLProc, vNullVal)
// 创建根结点
_variant_t varNodeType((short)MSXML2::NODE_ELEMENT)
MSXML2::IXMLDOMNodePtr pXMLNodeRoot= NULL
pXMLNodeRoot = pXMLDoc->createNode(varNodeType, _T("Cases"), _T(""))
// 添加根结点
pXMLDoc->appendChild(pXMLNodeRoot)
// 创建并添加下级结点
MSXML2::IXMLDOMNodePtr pXMLNodeNode= NULL
pXMLNodeNode = pXMLNodeRoot->appendChild(pXMLDoc->createElement(_T("Case")))
// 创建下级元素结点
MSXML2::IXMLDOMElementPtr pXMLEle = NULL
pXMLEle = pXMLDoc->createElement(_T("CopyFile"))
// 创建并设置下级结点属性
MSXML2::IXMLDOMAttributePtr pXMLAttr = NULL
pXMLAttr = pXMLDoc->createAttribute(_T("src"))
pXMLAttr->nodeTypedValue = "C:\\test.txt"
pXMLEle->attributes->setNamedItem(pXMLAttr)
pXMLAttr = pXMLDoc->createAttribute(_T("dest"))
pXMLAttr->nodeTypedValue = "D:\\Test.txt"
pXMLEle->attributes->setNamedItem(pXMLAttr)
// 添加元素结点
pXMLNodeNode->appendChild( pXMLEle)
MSXML2::IXMLDOMElementPtr pXMLEle1 = NULL
pXMLEle1 = pXMLDoc->createElement(_T("DelFile"))
pXMLEle1->appendChild(pXMLDoc->createTextNode("C:\\test.txt"))
// 添加元素结点
pXMLNodeNode->appendChild( pXMLEle1)
// 保存文档
pXMLDoc->save(_T("d:\\Test.xml"))
}
效果如下:
<?xml version="1.0" encoding="UTF-8" ?>
<Cases>
<Case>
<CopyFile src="C:\test.txt" dest="D:\Test.txt" />
<DelFile>C:\test.txt</DelFile>
</Case>
</Cases>
为了能够让MFC认识MSXML2,我们需要引入相应的dll,代码如下
#import "msxml4.dll"
把所有的数据当做一个字符串收到数据后先strstr(buffer,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
如果返回的是NULL则表示没有这段 退出
buffer是你收到的数据起始地址