vc读xml源码(vc读写xml文件)
本文目录一览:
如何在VC环境下编写程序读取XML文件
MSXML2::IXMLDOMDocumentPtr pDoc; //XML文档接口指针
public:
void AddKey(CString moduleName,CString keyName, CString keyValue);
CString ReadKeyValue(CString moduleName, CString keyName);
private:
void NewDocument(CString moduleName, CString keyName, CString keyValue);
public:
bool ReadTable(CTreeCtrl * tree);
bool ReadFields(CString tableName,vectorFIELD fields);
bool SaveTable(vectorFIELD fields,CString tableName,bool bNew);
};
VC怎样读xml文件,在线等
我也学了一段时间了根据书上和老师说的我总结如下:
XML:Extentsible Markup Language(可扩展标记语言)的缩 写,是用来定义其它语言的一种元语言,其前身是SGML(标准通用标记语言)。它没有标签集(tag set),也没有语法规则(grammatical rule),但 是它有句法规则(syntax rule)。任何XML文档对任何类型的应用以及正确 的解析都必须是良构的(well-formed),即每一个打开的标签都必须有匹配的结束标签,不得含有次序颠倒的标签,并且在语句构成上应符合技术规范的要求。 XML文档可以是有效的(valid),但并非一定要求有效。所谓有效文档是指其符合其文档类型定义(DTD)的文档。如果一个文档符合一个模式(schema)的规定 ,那么这个文档是"模式有效的(schema valid)"。
XML是计算机系统之间交换数据的增长很快的标准,微软采用这种版权语言(或称标准)来描述微软许多应用程序的XML数据。
正象HTML一样,可扩展置标语言XML(eXtensible Markup Language)也是一种置标语言。它同样依赖于描述一定规则的标签和能够读懂这些标签的应用处理工具来发挥它的强大功能。这一点,从XML的命名上也可窥见一斑。
“关于此规范的正确题目,亦即XML的正确全名,应该是Extensible Markup Language, eXtensible Markup Language只不过是一个拼写错误罢了。但是,现在简写XML不仅正确,而且正如它在本规范的标题中一样,是Extensible Markup Language的官方名称。
这个名称和简写是由James Clark最先提出的,其它可供选择的名称还包括小型标准置标语言MGML (Minimal Generalized Markup Language), 标准置标语言的小型结构MAGMA (Minimal Architecture For Generalized Markup Applications), 以及互联网置标结构语言SLIM (Structured Language for Internet Markup)。
——Extensible Markup Language (XML) 1.0 Specs, The Annotated Version. ”
从对XML的最初命名可以看出,XML的核心归根结底还是置标。不过,XML这个置标语言可比HTML的功能要强大的多了。
“人”如其名,XML的强大功能来自于“X”。也就是说,XML不但是置标语言,而且是可扩展的(eXtensible)置标语言。XML并非象HTML那样,提供了一组事先已经定义好了的标签,而是提供了一个标准,利用这个标准,你可以根据实际需要定义自己的新的置标语言,并为你的这个置标语言规定它特有的一套标签。准确的说,XML是一种源置标语言,它允许你根据它所提供的规则,制定各种各样的置标语言。这也正是XML语言制定之初的目标所在。
“XML的制定目标为:
XML应该可以在互联网上直接使用(*就象HTML那样好用)。
XML应该支持各种不同的应用方式(*不但包括浏览,还包括对内容的分析)。
XML应该与SGML兼容(*子承父业嘛,后面我们会讲到,SGML是XML的直接先驱)。
处理XML文件的应用程序应该容易编写(*计算机系的研究生花上两周的工夫就该差不多了)。
XML中的可选特性的数量应该减到最小,最好减至没有(*可选特性经常造成混淆)。
XML文件应该具有良好的可读性,并且比较清晰(*别象HTML那样,如果不借助浏览器,要想读它简直就是对你意志力和耐心的考验)。
用XML设计新的置标语言应该方便快捷(你不必再去经历标准制定的繁琐程序了)。
XML设计的置标语言应该正式、简洁(不然怎么易写易读?)。
XML文件应该容易编制(想想要用“记事本”写个HTML是一件多么可怕的工作)。
XML标记的简洁性并不重要(你不必再去费尽心机减少标记)。
怎样用vc++读写xml文件
用微软的 DOM,
MSXML4
//引入msxml4.dll
#import "C:/WINNT.0/system32/msxml4.dll"
//创建XMLDOMDocument指针
MSXML2::IXMLDOMDocumentPtr pXMLDoc;
// 初始化COM接口
::CoInitialize(NULL);
// 通过智能指针创建一个解析器的实例
HRESULT hr;
hr =pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
//加载文件
pXMLDoc-load("f://he.xml");
//在树中查找名为City的节点,"//"表示在任意一层查找
MSXML2::IXMLDOMElementPtr childNode ;
childNode = (MSXML2::IXMLDOMElementPtr)(pXMLDoc-selectSingleNode("//AUTHOR"));
//得到节点类型
MSXML2::DOMNodeType nodeType;
childNode-get_nodeType(nodeType);
//节点名称
BSTR var;
CString name;
childNode-get_nodeName(var);
name = (char*)(_bstr_t)var;
//节点值
VARIANT varVal;
childNode-get_nodeTypedValue(varVal);
CString strValue = (char*)(_bstr_t)varVal;
读属性:
//节点属性,放在链表中
MSXML2::IXMLDOMNamedNodeMapPtr pAttrs = NULL;
MSXML2::IXMLDOMNodePtr pAttrItem;
childNode = (MSXML2::IXMLDOMElementPtr)(pXMLDoc-selectSingleNode("//NUM"));
childNode-get_attributes(pAttrs);
long nCount ;
pAttrs-get_length(nCount);
for(int i = 0 ; i nCount ; i++)
{
pAttrs-get_item(i,pAttrItem);
//我们可以通过函数get_nodeName,get_nodeTypedValue得到属性名和属性值
//也可以直接得到
CString strAttrName = (char*)(_bstr_t)pAttrItem-nodeName;
CString strAttrValue = (char*)(_bstr_t)pAttrItem-nodeTypedValue;
}
另外
可以用MSXML DOM
创建一个文档对象的过程。
HRESULT hr;
IXMLDomDocument* pXMLDoc;
IXMLDOMNode* pXDN;
Hr=CoInitialize(NULL); //COM的初始化
hr=CoCreateInstance(CLSID_DOM Document,NULL,CLSCTX_INPPROC_SERVER,
IID_IXMLDOMDocument,(void**) pXMLDoc);
hr=pXMLDoc-QueryInterface (IID_IXMLDOMNode,(void**)pXDN);
使用文档中的createElement方法来创建一个节点装载和保存XML文件。通过load或者是loadXML方法可以从一个指定的URL来装载一个XML文档Save方法是用来把文档保存到一个指定的位置,用getElementsByTagName获得制定节点数据
二、
// 创建对象
CoInitialize(NULL); // 初始化COM
// 创建解析器实例
CComPtrIXMLDOMDocument spXMLDOM;
BSTR bstrItemText;
// long value;
CString strbuf;
HRESULT hr=spXMLDOM.CoCreateInstance (_uuidof(DOMDocument));
spXMLDOM-put_async(VARIANT_FALSE);
spXMLDOM-put_validateOnParse(VARIANT_FALSE);
spXMLDOM-put_resolveExternals(VARIANT_FALSE);
spXMLDOM-put_preserveWhiteSpace(VARIANT_TRUE);
_bstr_t path = _bstr_t(xmlPath);
// 装载XML文档。
hr=spXMLDOM-load(path);
// 1、读取里面全部文本
spXMLDOM-get_text(bstrItemText); // new
strbuf = bstrItemText; // new
// 2、读取一个节点
_bstr_t bstrSS("paragraph");
CComPtrIXMLDOMNodeList spParagraphs;
spParagraphs=spXMLDOM-getElementsByTagName(bstrSS); //搜索"Paragrah"
//是否正确的得到了指向IDOMNodeList的指针。
hr = spParagraphs-get_length(value); //得到所包含的NODE节点的个数
if(SUCCEEDED(hr))
...{
spParagraphs-reset();
for(int ii=0; iivalue; ii++)
...{
CComPtrIXMLDOMNode spParagraph;
//得到具体的一个NODE节点
// hr = spParagraphs-get_item(ii,spParagraph);
spParagraph = spParagraphs-nextNode();
if(SUCCEEDED(hr))
...{
spParagraph-get_text(bstrItemText); //得到该节点相关的文本信息
strbuf += bstrItemText;
strbuf += " ";
}
}
}