谁能给我点XML读写的代码让我参考一下。

ColderRain 2003-12-23 09:43:52
加精
我刚接触XML,对XML不熟悉,现在没有时间学习。
能否给出代码实现如下功能:
1.创建一个XML文件
2.随便将一个字符串写进去
3.将上一部中的字符串读出来。

如能提供VC读写XML的资料更好。
...全文
131 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
clancy 2003-12-25
  • 打赏
  • 举报
回复
给我一个信箱吧,我发给你。
孤必有邻 2003-12-24
  • 打赏
  • 举报
回复
曾经看过这个:http://xml007.myetang.com/
孤必有邻 2003-12-24
  • 打赏
  • 举报
回复
先贴一段写的代码:
#import "msxml3.dll" named_guids
using namespace MSXML2;

CoInitialize(NULL);
...
//一段写的代码
// 创建文档
MSXML2::IXMLDOMDocument2Ptr pXMLDoc = NULL;
pXMLDoc.CreateInstance("Msxml2.DOMDocument.3.0");
// Create the Processing Instruction
MSXML2::IXMLDOMProcessingInstructionPtr pXMLProc = NULL;
pXMLProc = pXMLDoc->createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
// Insert the Processing Instruction
_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("Root"), _T(""));
// 添加根结点
pXMLDoc->appendChild(pXMLNodeRoot);
// 创建并添加下级结点
MSXML2::IXMLDOMNodePtr pXMLNodeNode= NULL;
pXMLNodeNode = pXMLNodeRoot->appendChild(pXMLDoc->createElement(_T("Node1")));
pXMLNodeNode = pXMLNodeRoot->appendChild(pXMLDoc->createElement(_T("Node2")));
// 创建并设置下级结点属性(3个:姓名、性别、年龄)
MSXML2::IXMLDOMAttributePtr pXMLAttr = NULL;
pXMLAttr = pXMLDoc->createAttribute(_T("name"));
pXMLAttr->nodeTypedValue = "王进";
pXMLNodeNode->attributes->setNamedItem(pXMLAttr);
pXMLAttr = pXMLDoc->createAttribute(_T("sex"));
pXMLAttr->nodeTypedValue = "男";
pXMLNodeNode->attributes->setNamedItem(pXMLAttr);
pXMLAttr = pXMLDoc->createAttribute(_T("age"));
pXMLAttr->nodeTypedValue = "80";
pXMLNodeNode->attributes->setNamedItem(pXMLAttr);
// 创建下级元素结点
MSXML2::IXMLDOMElementPtr pXMLEle = NULL;
pXMLEle = pXMLDoc->createElement(_T("file"));
pXMLEle->appendChild(pXMLDoc->createTextNode("Element"));
// 添加元素结点
pXMLNodeNode->appendChild( pXMLEle );
/*
// 创建下级元素结点
MSXML2::IXMLDOMElementPtr pXMLEleSub = NULL;
pXMLEleSub = pXMLDoc->createElement(_T("file"));
pXMLEleSub->appendChild(pXMLDoc->createTextNode("SubElement"));
// 添加下级元素结点
pXMLEle->appendChild( pXMLEleSub );
*/
// 保存文档
pXMLDoc->save(_T("c:\\Test.xml"));

...
CoUninitialize();
ColderRain 2003-12-24
  • 打赏
  • 举报
回复
我只能使用MS的那个接口写。不可以使用第三方的东西。
sjzxyg 2003-12-24
  • 打赏
  • 举报
回复
用Xerces C++,很简单的
曾经的猎狐 2003-12-24
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include "iostream.h"
#include "msxml.h"
#include "atlbase.h"
#import "msxml.dll" //引入类型库
#include "windows.h"
#include "stdio.h"
#include "string.h"
//#include "afx.h"
#include <iostream.h>
#include "cstringt.h"
//#include "file.h"
#include "atlstr.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

int Exit();
void LoadFromString();
void CreateXML();


//XML文本模板
//_bstr_t XMLTemple="<China><Beijing> -12 </Beijing><Shanghai Weather='Cloudy'> 9 </Shanghai><Beijing>-20</Beijing></China>";
CString XMLTemple="<Connection Action='UploadASMResult'><VehicleInfo License='sd3' LicenseClass='34s' VLTID='21' Mileage='1' RegDate='2000-12-11 12:11:14' OwnerName='12' OwnerAddr='12' BodyColor='343' EngineID='3445' VIN='5434' Cleaners='34'></VehicleInfo><ASMResult TestID='213d' License ='ads2' LicenseClass='231a' StationID ='2da' EISID='2ea' OperatorID='2ea' AmbientTemp='2.5' AmbientHum='2.5' Pressure='1' TestStartTime='2002-12-11 11:12:11' TestEndTime='2004-10-11 11:12:11' AmbientHC='2.2' AmbientCO ='2.2' AmbientNO='2.2' ResidualHC ='2.2' Is5024Done='1' 5024HC = '2.2' 5024CO='2.2' 5024NO = '2.2' 5024Rotary='2.2' 5024Result='2.2' Is2540Done='0' 2540HC='2.2' 2540CO='2.2' 2540NO='2.2' 2540Rotary='2.2' 2540Result='2.2' Result='2' IsGasCapTested='1' GasCapResult='12' OutlookResult='54' AbortReason='66456'></ASMResult></Connection>";
int main()
{
cout << " XML编程--示范程序 " << endl;

CoInitialize(NULL); //初始化COM 环境

cout << "------生成新的XML文本 ------" << endl;

CreateXML();

cout << "------读取已有XML文本 ------" << endl;

LoadFromString();
return Exit();

}
void CreateXML()
{
MSXML::IXMLDOMDocumentPtr pDoc;
HRESULT hr =pDoc.CreateInstance(__uuidof(MSXML::DOMDocument));
if(!SUCCEEDED(hr))
{

cout << "无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!" << endl;
Exit();

}

MSXML::IXMLDOMElementPtr pDocElement=pDoc->createElement("China");

pDoc->appendChild(pDocElement);

cout << "生成树根:\n" << pDoc->xml << endl;

MSXML::IXMLDOMElementPtr pNewChildElement,pNewChildElement1;

pNewChildElement=pDoc->createElement("Beijing");

pNewChildElement->Puttext("-11");

pDocElement->appendChild(pNewChildElement);

cout << "添加节点:\n" << pDoc->xml << endl;

pNewChildElement=pDoc->createElement("Shanghai");

pNewChildElement->Puttext("9");

pNewChildElement->setAttribute("Weather",_variant_t("Cloudy"));

pDocElement->appendChild(pNewChildElement);

pNewChildElement=pDoc->createElement("DEFINE");

pNewChildElement1=pDoc->createElement("ID");

pNewChildElement->appendChild(pNewChildElement1);

pDocElement->appendChild(pNewChildElement);
cout << "再添加节点:\n" << pDoc->xml << endl;

char buf[1024];
memset(buf,0,1024);
strcat(buf,pDoc->xml);
//sprintf(buf,"%s",pDoc->xml);
FILE *p;
p=fopen("xxx.xml","w");
fwrite(buf,1,strlen(pDoc->xml),p);
fclose(p);

pDocElement->removeChild (pNewChildElement);

cout << "把刚加入的节点删除:\n" << pDoc->xml << endl;

}



void LoadFromString()
{

MSXML::IXMLDOMDocumentPtr pDoc;

HRESULT hr =pDoc.CreateInstance(__uuidof(MSXML::DOMDocument));

if(!SUCCEEDED(hr))

{
cout << "无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!" << endl;
Exit();

}
_bstr_t name;
pDoc->loadXML((_bstr_t)XMLTemple);
cout << "读取结果:\n" << pDoc->xml << endl;

MSXML::IXMLDOMElementPtr pDocElement=pDoc->GetdocumentElement();
_variant_t var;

MSXML::IXMLDOMElementPtr pElement=pDocElement->selectSingleNode("Connection");
var=pElement->getAttribute("Action");
cout<<var.cVal<<endl;
cout<<var.cVal<<endl;
cout<<var.cVal<<endl;
cout<<var.cVal<<endl;
cout<<var.cVal<<endl;
cout<<var.bstrVal<<endl;
cout<<var.cVal<<endl;
cout<<var.cVal<<endl;
cout<<var.cVal<<endl;
cout<<var.cVal<<endl;
cout<<var.cVal<<endl;
cout<<var.cVal<<endl;
cout<<var.cVal<<endl;
//pDocElement->removeChild(pElement);

MSXML::IXMLDOMNodeListPtr pLists = pDocElement->selectNodes("ASMResult");





long n = pLists->Getlength();
for (int i = 0; i < n; i++)
{
MSXML::IXMLDOMElementPtr pDocElement = pLists->Getitem(i);
cout << pDocElement->Gettext() << endl;
}

cout << "定位删除Shanghai节点:\n" << pDoc->xml << endl;

cout << "保存结果 Save .....(模拟而已)" << endl;

cout << "\n 好了,就这么简单" << endl;
}

int Exit()
{

getchar();


return 1;

}
bluebohe 2003-12-24
  • 打赏
  • 举报
回复
我当时就是照书来的
bluebohe 2003-12-24
  • 打赏
  • 举报
回复
去书店找本书吧
ColderRain 2003-12-23
  • 打赏
  • 举报
回复
人都到那里去了。

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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