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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java XML程式設計例項解析JavaXML程式設計
- Winsock程式設計初步之<二> 源程式例項(一) (轉)程式設計
- XML 程式設計思想:XML語義(轉)XML程式設計
- javascript操作xml程式碼例項JavaScriptXML
- XML 程式設計思想:XML和語義(轉)XML程式設計
- XML 程式設計思想: 研讀XML Hacks(轉)XML程式設計
- XML 程式設計思想: XML 語義錨(轉)XML程式設計
- js將字串轉換為xml物件程式碼例項JS字串XML物件
- XML 程式設計思想: Harold 的高效 XML 設計原則(轉)XML程式設計
- Jmeter beanshell程式設計例項JMeterBean程式設計
- 設計模式例項程式碼設計模式
- KafKa Java程式設計例項KafkaJava程式設計
- Android感測器程式設計帶例項(轉)Android程式設計
- XML 程式設計思想:XML 建模藝術描述(轉)XML程式設計
- XML與ASP程式設計(一) (轉)XML程式設計
- XML輕鬆學習手冊(6)XML例項解析(轉)XML
- XML 程式設計思想: 專利編檔遭遇 XML(轉)XML程式設計
- AsmL例項研究(二) (轉)ASM
- Shell程式設計入門例項程式設計
- Qt 中Socket程式設計例項QT程式設計
- android socket程式設計例項Android程式設計
- The MySQL C API程式設計例項MySqlAPI程式設計
- Java&CORBA程式設計例項JavaORB程式設計
- corba程式設計簡單例項ORB程式設計單例
- js 將xml轉換為table表格簡單程式碼例項JSXML
- jQuery解析xml檔案程式碼例項jQueryXML
- Winsock程式設計初步之<三> 源程式例項(2) (轉)程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 二、第一個DirectDraw例項 (轉)遊戲程式設計
- XML 程式設計思想:查詢 XML 格式的 WordNet(轉)XML程式設計
- XML 程式設計思想: XMLOpen 會議,再評 XML Hacks(轉)XML程式設計
- [C++]C++程式設計例項C++程式設計
- shell程式設計例項--實現累加程式設計
- 【Akka】Akka入門程式設計例項程式設計
- Delphi趣味程式設計例項三則程式設計
- javascript讀取xml檔案程式碼例項JavaScriptXML
- 演算法設計應用例項 (轉)演算法
- 資料庫中的XML應用例項 (轉)資料庫XML
- XML 程式設計思想:XML和語義:XML 會兌現其承諾嗎?(轉)XML程式設計