- /*++
Copyright (c) 2007 nsfocus information technology
Module Name:
enumxml.cpp
Abstract:
枚举foo,打印每个节点的值。
Author:
xuyibo (xuyibo) 2007-09-22
Revision History:
--*/
#include #include #pragma comment(lib, "ole32.lib") #pragma comment(lib, "oleaut32.lib")
IXMLDOMDocument2* LoadXML(WCHAR* pXML) { HRESULT hr; IXMLDOMDocument2* pXMLDoc = NULL; IXMLDOMParseError* pObjError = NULL; BSTR bstr = NULL; VARIANT_BOOL status; VARIANT vSrc;
// // 创建一msxml 文档实例,返回IXMLDOMDocument2接口。 hr = CoCreateInstance(CLSID_DOMDocument2, NULL, CLSCTX_INPROC_SERVER, __uuidof(IXMLDOMDocument2), (void**)&pXMLDoc); if (FAILED(hr)) { printf("Failed to CoCreate an instance of an XML DOM\n"); printf("Error code: %x\n", hr); goto clean; }
hr = pXMLDoc->put_async(VARIANT_FALSE); if (FAILED(hr)) { printf("Failed to set async property\n"); goto clean; }
hr = pXMLDoc->put_validateOnParse(VARIANT_FALSE); if (FAILED(hr)) { printf("Failed to set validateOnParse\n"); goto clean; }
hr = pXMLDoc->put_resolveExternals(VARIANT_FALSE); if (FAILED(hr)) { printf("Failed to disable resolving externals.\n"); goto clean; }
VariantInit(&vSrc); V_BSTR(&vSrc) = SysAllocString(pXML); V_VT(&vSrc) = VT_BSTR;
// // 读取foo.xml hr = pXMLDoc->load(vSrc, &status);
if (status!=VARIANT_TRUE) { hr = pXMLDoc->get_parseError(&pObjError); hr = pObjError->get_reason(&bstr); printf("Failed to load DOM from books.xml. %S\n",bstr); goto clean; }
clean: if (bstr) SysFreeString(bstr); if (&vSrc) VariantClear(&vSrc); if (pObjError) pObjError->Release();
return pXMLDoc; }
void Dump(BSTR pData) { char Buffer[512];
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, pData, -1, Buffer, sizeof(Buffer), NULL, NULL); puts(Buffer); }
int main(int argc, char* argv[]) { HRESULT hr; IXMLDOMDocument2* pXMLDoc = NULL; IXMLDOMNodeList* pNodeList = NULL; IXMLDOMNode* Node; IXMLDOMNamedNodeMap* NodeMap; IXMLDOMNode* IDNode; long I; long Length; BSTR BStr; BSTR BStrValue;
// // First we must call CoInitialize. //
CoInitialize(NULL);
// // Load xml. //
pXMLDoc = LoadXML(L"foo.xml"); if (pXMLDoc == NULL) { return 1; }
if (pXMLDoc->selectNodes(L"//root/item", &pNodeList) != S_OK) { return 1; }
hr = pNodeList->get_length(&Length); if (FAILED(hr)) { return 1; }
for (I = 0; I < Length; i++) { if (pNodeList->get_item(I, &Node) == S_OK) {
// // Dump text => Hello MSXML //
if (Node->get_text(&BStr) == S_OK) { Dump(BStr); }
if (Node->get_attributes(&NodeMap) == S_OK) { if (NodeMap->getNamedItem(L"id", &IDNode) == S_OK) {
// // Dump id => 1 //
if (IDNode->get_text(&BStrValue) == S_OK) { Dump(BStrValue); puts(""); SysFreeString(BStrValue); } IDNode->Release(); } NodeMap->Release(); }
SysFreeString(BStr); Node->Release(); } }
pXMLDoc->Release();
// // Finally we should call CoUninitialize //
CoUninitialize();
getchar(); return 0; }
|
相关推荐
1. **XML解析器**:MSXML提供了几种不同的解析器,如MSXML2.DOMDocument、MSXML2.FreeThreadedDOMDocument等,它们能够加载XML文档并构建一个DOM(Document Object Model)树。DOM是一种将XML文档结构化为节点树的...
总的来说,XML解析是软件开发中的基础技能,掌握MSXML解析器的使用对于在Windows环境下处理XML数据至关重要。理解DOM和SAX两种解析模式的优缺点,以及如何在MSXML中应用它们,是提升开发效率的关键。同时,不断学习...
1. DOM解析:MSXML中的DOM解析器允许开发者通过编程方式访问XML文档的结构,可以方便地创建、修改或查询XML文档的节点。DOM将整个XML文档加载到内存中,形成一个可遍历的对象树,便于进行复杂的查找和操作。 2. SAX...
MSXML方法的XML解析器源码可以帮助开发者深入理解XML解析的内部工作原理,从而更好地利用这些工具进行XML处理。 DOM是一种将XML文档表示为树形结构的模型,允许开发者通过节点操作来访问和修改XML数据。在MSXML中,...
本示例中,"DOM-MSXML实现解析xml文件"着重介绍了如何利用MSXML库的DOM解析器来处理XML。具体步骤如下: 1. **初始化解析器**:首先,需要实例化一个IXMLDOMDocument对象,这可以通过CoCreateInstance函数完成,...
XML(eXtensible Markup ...这个压缩包提供的MSXML组件和安全更新,旨在提供一个稳定、安全的环境来处理XML文档,无论你是XML初学者还是经验丰富的开发者,都应该掌握XML解析器的使用,以提高工作效率和代码质量。
MSXML,全称为Microsoft XML Core Services,是由微软公司开发的一款XML解析器,它允许程序员和Web开发者处理、创建和查询XML文档。XML(eXtensible Markup Language)是一种标记语言,广泛用于数据交换、存储和表示...
其中,DOM 解析器允许开发者以面向对象的方式处理 XML 文档,而 SAX 解析器则更适用于处理大型文档,因为它不需要一次性加载整个文档到内存。 使用 MSXML 解析 XML 文档的步骤通常包括以下几步: 1. 引入 MSXML 库...
在VB中,我们可以使用内置的MSXML库(Microsoft XML库)或者.NET Framework提供的System.Xml命名空间来创建XML解析器。 1. **MSXML库**:这是Microsoft提供的一套COM组件,包括MSXML2.DOMDocument、MSXML2.XMLHTTP...
JavaScript中的XML解析器是用于处理XML数据的关键工具,它允许开发者在浏览器环境中解析XML文档或者XML字符串,从而在Web应用中有效地使用这些数据。XML(eXtensible Markup Language)是一种结构化数据语言,常用于...
对于Windows系统,MSXML(Microsoft XML Core Services)提供了一个内置的XML解析器,其中msxml4.dll是MSXML 4.0版本的动态链接库文件,包含了许多与XML处理相关的接口和类。 在安装“XML解析器安装包”时,通常会...
5. **SAX(Simple API for XML)接口**:除了DOM,MSXML还支持SAX解析器,它是一种事件驱动的解析方式,适用于处理大型XML文档,因为它不需要一次性加载整个文档到内存中。 6. **XPath和XSLT支持**:MSXML 4.0 SP2...
在Windows环境中,MSXML(Microsoft XML Core Services)是一个常用的XML解析器库,提供了对DOM、SAX和XPath的支持。其中,msxml6.msi文件很可能是MSXML的一个安装包,用于在系统上安装或更新这个组件。安装MSXML后...
1. **XML解析器**:MSXML5的解析器负责将XML文本转换为内存中的数据结构,可以进行验证或非验证解析。验证解析会检查XML文档是否符合指定的DTD(Document Type Definition)或XML Schema,确保数据的合法性。 2. **...
在VC环境中开发XML解析器时,开发者通常会利用标准库(如Windows SDK中的MSXML或开源库如TinyXML、pugixml)或自行实现解析逻辑。通过分析`ce_xml.cpp`,我们可以深入理解XML解析器的工作原理,学习如何处理XML的开...
在提供的信息中,我们关注的是MSXML的4.0和6.0两个版本,这两个版本在XML解析器领域都有着重要的地位,尤其对于初学者来说,它们是理解和实践XML技术的基础工具。 XML(eXtensible Markup Language)是一种标记语言...
**VC6 XML解析器** XML(eXtensible Markup Language)是一种用于标记数据的语言,它在软件开发领域,尤其是在Web应用程序和数据交换中扮演着重要角色。VC++ 6.0,是Microsoft Visual C++的一个早期版本,它提供了...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件以及软件的本地化等领域。...这个过程涉及了XML解析、COM组件的使用、DOM树遍历以及在对话框中显示结果等多方面的技术。