XML程式設計例項(二) (轉)
例項(二)
模型:
前面已經說了,對於DOM模型來說,整個XML被解析成一個樹形的結構。所有的標籤、屬性等都被當作來看待。所以,必須瞭解清楚物件的含義,及其相互關係,方能正確操作。
為了先有一個感性認識,讓我們開始吧。(為了方便說明,程式碼裡基本上沒有異常處理) microsoft-com::office" />
生成一個XML文字
假設我們要建立一個如下的XML文字
我們首先應該先建立一個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文字應該為
再增加一個子節點,並設定節點屬性(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模型,我們就可以進行各種操作。最常見的是,我們需要尋找特定的資訊,並進行處理。
查詢定位
使用SingleNode (),SelectNodes(XPath)來定位標籤,取得對應的Node(s)物件。
XPath
XPath是類似於檔案路徑名的字串,也像的查詢語句,可以限定查詢範圍。
找到指定物件,我們就可各種處理了,新增、刪除、取值等等。
小結:上面僅僅是對DOM模型的程式設計進行了簡單的介紹,以期。要詳細瞭解,還必須查閱SDK的文件。如果可能,將在以後介紹SAX 模型、T對 XML的轉換等。
相關連結:要使用MSXML Parser ,你必須先其SDK和執行庫。
.microsoft.com/download/xml/Install/3.0/Me/EN-US/msxml3.exe">
//-------------下面是程式碼例項-----------
#include "stdafx.h"
#include "iostream.h"
#include "msxml.h"
#include "atlbase.h"
#import "msxml.dll" //引入型別庫
#ifdef _DE
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int Exit();
void LoadFromString();
void CreateXML();
//XML文字模板
_bstr_t XMLTemple="
int main()
{
cout << " XML程式設計--示範 " << endl;
CoInitialize(NULL); //初始化環境
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;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988461/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- KafKa Java程式設計例項KafkaJava程式設計
- 設計模式例項程式碼設計模式
- Jmeter beanshell程式設計例項JMeterBean程式設計
- 網頁倒數計時跳轉程式碼例項網頁
- shell script程式設計小結——附帶例項程式設計
- Spark程式設計環境搭建及WordCount例項Spark程式設計
- VC++視覺化程式設計第一個程式設計例項出錯C++視覺化程式設計
- [翻譯]返回導向程式設計例項入門程式設計
- keras轉tensorflow lite【方法二】直接轉:簡單模型例項Keras模型
- 例項九— 除法器設計
- LINUX Shell指令碼程式設計例項詳解(一)上Linux指令碼程式設計
- 微控制器C程式設計例項指導pdfC程式程式設計
- makefile--偽目標語法與程式設計例項程式設計
- Python - 物件導向程式設計 - 類變數、例項變數/類屬性、例項屬性Python物件程式設計變數
- div前後翻轉效果程式碼例項
- CSS3旋轉效果程式碼例項CSSS3
- 解析JavaScript設計模型Iterator例項JavaScript模型
- XML節點自動生成簡單例項XML單例
- 設計模式(二)——單例模式設計模式單例
- Spring程式設計式和宣告式事務例項講解Spring程式設計
- 詳解Python物件導向程式設計之類、例項、方法Python物件程式設計
- JavaScript倒數計時程式碼例項JavaScript
- Verilog設計技巧例項及實現
- 好程式設計師web前端分享在HTML中使用JavaScript例項程式碼程式設計師Web前端HTMLJavaScript
- Matlab簡介與程式設計例項(一)(西北工業大MOOC)Matlab程式設計
- Rust 程式設計影片教程(進階)——010_2Box 使用例項Rust程式設計
- Python - 物件導向程式設計 - 例項方法、靜態方法、類方法Python物件程式設計
- jS設計模式二:單例模式JS設計模式單例
- JS設計模式(二)--- 單例模式JS設計模式單例
- 程式設計注意事項程式設計
- FPGA二段式verilog程式碼例項FPGA
- C++設計模式+例項視訊教程C++設計模式
- 設計模式 - 原則及例項講解設計模式
- 設計模式例項講解 - 里氏替換設計模式
- 設計模式例項講解 - 介面隔離設計模式
- 設計模式例項講解 - 依賴倒置設計模式
- 設計模式:命令模式(Command Pattern)及例項設計模式
- MySQL與MongoDB設計例項對比QYMySqlMongoDB
- 玩轉 PHP 網路程式設計全套之 socket 選項設定 APIPHP程式設計API