日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

VC操作XML编程实例

發布時間:2025/3/20 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC操作XML编程实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

XML編程實例

文章正文

前段時間,由于工作的需要,利用到了XML,所以對其進行了一些簡單的研究。在此愿把一些心得寫出來,與各位分享,不對的地方還望多多包涵。

1.什么是 XML?
首先,我想各位應該都已經大概知道什么是XML了。如果,你對什么是XML還沒有一個概念的話,你可以看一些相關的材料,我就不多說了。

2.為什么要用XML?
其實,剛開始我也不是很明白,后來在工作中才慢慢意識到。首先,我寫 的程序需要傳送很多的數據結構,比如表格,目錄樹等等。要在以往,我想自己會去定義一個數據結構。這是相當麻煩的一件事情,而且當這個結構需要不斷更新, 有很大的靈活性時,那就更讓人頭疼了,更別說通用性和跨平臺了。這時候,XML對樹形結構數據的強大表達能力就顯示出來了。比如一個表格數據。

11
12

21
22


<TABLE>
<TR>
<TD> 11</TD>
<TD>12</TD>
</TR>
<TR>
<TD> 21</TD>
<TD>22</TD>
</TR>
</TABLE>


以上的描述,很簡單明了,通用性和跨平臺是很顯見的。當然,代價也是有的,那就是用于表達信息 的數據變大了。這就要求你在性能和可擴展性之間進行權衡了再次,XML 現在已經開始流行起來了,其前身(說類似更合適)HTML就是一個明證,更不用說微軟的.NET計劃就是架構在XML上面的。

最后,因為XML的流行,已經有了越來越多的開發工具(SDK),比如XML Parser就有很多種。利用這些工具,我們就可以更快的進行開發,從而減少不必要的麻煩----比如自己定義一套規范,還要開發相關的操作工具等等,麻煩,而且不易與外界進行交流。

3.使用什么開發工具

這里,我們面向的是程序員,猶指VC++的程序員。我們的選擇很多,不過選擇Microsoft 的XML Parser SDK應該是不錯的,至少文檔很詳盡(在這一點上,微軟做得一直不錯)。當然還有很多別的選擇,比如Apache.org上的eXcel。更詳細的信息, 請看www.ibm.com/xml。

基本概念

XML的編程模式

前面我們說過,XML對樹的表達能力是很強大的,我們完全可以把一個XML文檔用一個樹來表達,對于文檔的操作就是對樹的操作,這就是DOM(文檔對象模型)。然而,DOM對XML文檔的處理有許多的毛病,比如速度慢等,于是有了另一種模型SAX.

下面,我們分別詳細的對這兩種模型進行說明。

DOM模型

DOM模型需要對整個XML文檔進行掃描,然后解析生成一個對象樹,XML文檔中的所有標簽和屬性都是用對象來表示,而不是一個孤立的文本。因為是對象,所以有一個上下文,有一個包含關系。

基本是這樣的

Doc

Element

Note

Text

Doc是指整個樹對象,包括了基本的屬性。

Element是指的一個標簽,可以包含屬性(Attribute)和子節點(ChilNode)的節點對象。

Note也是一個標簽,不過不能包含子節點和屬性。

Text就是簡單的文本。

既然是樹操作,就要包含節點的添、刪和瀏覽等基本的功能。利用這些功能,就可以完全對XML文檔進行操作了。對象級的操作,比起直接對文本操作要容易得多,也要直觀得多。

SAX模型

我們說了,DOM模型的缺點就是速度慢,和浪費內存。因為在許多的情況下,我們并不需要對整個的XML文檔進行掃描。而僅僅需要其中的某些信息,這時候就沒有必有生成一個龐大的樹結構了,特別是當文件很大的時候。

SAX模型,就是對XML文檔邊掃描,邊處理。類似于許多的程序設計思想,SAX是事件驅動的。這個意 思是說,它可以在處理的過程中生成不同的消息,并調用相應的函數進行處理。并可以在中途退出,這一點非常重要。比如網頁在下載的過程中,就可以一邊下載, 一邊把已下部分進行解析顯示。

根據不同的情況,我們采用不同的方法進行處理。

應該說明的是,XML的這些模型都是標準化組織定義的,而不是某個公司的規范。所以,程序的移植應該比較的方便。

XML編程舉例

由于Microft XML Parser的文檔比較的全面,而且和Visual C++的結合比較緊密,我們這里就以這樣的組合來進行舉例,對于別的語言,可以舉一反三。

對Microsoft XML Parser的一點說明:

所有的對象都是COM對象。為此,我們使用SmartPointer來減少AddRef, ReleaseRef的麻煩。同樣,因為使用的字符串統一是BSTR類型的,內存的釋放也是一個比較麻煩的事情,所以用_bstr_t 類來對BSTR數據類型進行封裝,可以減少不必要的麻煩。

DOM模型:

前面已經說了,對于DOM模型來說,整個XML文件被解析成一個樹形的結構。所有的標簽、屬性等都被當作對象來看待。所以,必須了解清楚對象的含義,及其相互關系,方能正確操作。

為了先有一個感性認識,讓我們開始吧。(為了方便說明,代碼里基本上沒有異常處理)

生成一個XML文本

假設我們要創建一個如下的XML文本


-11

9


我們首先應該先創建一個Document對象,如下:MSXML::IXMLDOMDocumentPtr pDoc;

pDoc.CreateInstance(__uuidof(MSXML::DOMDocument));

如果創建成功,那么我們就會得到一個XMLDOMDocument對象實例。下一步就是添加 根節點DocumentElement,記住XML只有一個根。

創建Element對象作為根節點

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

把根節點插入到目錄樹中

pDoc->appendChild(pDocElement);

好了,生成一個樹根了,我們現在來看一看結果:用pDoc -> xml 可以取得整個DOM對象的文本 因為樹根下沒有任何東西,所以只顯示現在,我們要在樹根下插入子節點,并設置節點文本(Text)

MSXML::IXMLDOMElementPtr pNewChildElement;
pNewChildElement=pDoc->createElement("Beijing");
pNewChildElement->Puttext("-11");
pDocElement->appendChild(pNewChildElement);
這時候整個的 XML文本應該為


-11


再增加一個子節點,并設置節點屬性(Attribute)pNewChildElement=pDoc->createElement("Shanghai");
pNewChildElement->Puttext("9");
pNewChildElement->setAttribute("Weather",_variant_t("Cloudy")); pDocElement->appendChild(pNewChildElement);

于是,我們就可以得到預期的XML文本了。
其他的操作:
刪除操作:
從父節點來刪除子節點pDocElement->removeChild(pNewChildElement)
存盤操作:
pDoc->Save();
裝載已有XML文本
如果我們已經有了一個XML文件,想對其進行解析,那么可以使用Document 對象的Load或LoadXML來進行加載,并在加載的同時進行語法分析。

如果加載成功,那么就會在內存中生成一個樹形結構。利用DOM模型,我們就可以進行各種操作。最常見的是,我們需要尋找特定的信息,并進行處理。

查找定位

使用SelectSingleNode (XPath),SelectNodes(XPath)來定位標簽,取得對應的Node(s)對象。

XPath

XPath是類似于文件路徑名的字符串,也像SQL的查詢語句,可以限定查找范圍。

找到指定對象,我們就可各種處理了,添加、刪除、取值等等。

小結:上面僅僅是對DOM模型的編程進行了簡單的介紹,以期快速入門。要詳細了解,還必須查閱SDK的文檔。如果可能,將在以后介紹SAX 模型、XSLT對 XML的轉換等。

相關鏈接:要使用MSXML Parser ,你必須先下載其SDK和運行庫。

http://download.microsoft.com/download/xml/Install/3.0/WIN98Me/EN-US/msxml3.exe

http://download.microsoft.com/download/xml/SDK/3.0/WIN98Me/EN-US/xmlsdk.exe

//-------------下面是代碼實例-----------

#include "stdafx.h"

#include "iostream.h"

#include "msxml.h"

#include "atlbase.h"

#import "msxml.dll" //引入類型庫

#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=" -11 9 ";

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;

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);

cout << "再添加節點:"n" << pDoc->xml << endl;

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();

}

pDoc->loadXML(XMLTemple);

cout << "讀取結果:"n" << pDoc->xml << endl;

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

MSXML::IXMLDOMElementPtr pElement=pDocElement->selectSingleNode("Shanghai");

pDocElement->removeChild(pElement);

cout << "定位刪除Shanghai節點:"n" << pDoc->xml << endl;

cout << "保存結果 Save .....(模擬而已)" << endl;

cout << ""n 好了,就這么簡單" << endl;

}

int Exit()

{

getchar();

return 1;

}

轉載于:https://www.cnblogs.com/whitetiger/archive/2008/03/03/1088384.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的VC操作XML编程实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。