XML初學進階學習筆記(4)(轉)

amyz發表於2007-08-12
XML初學進階學習筆記(4)(轉)[@more@]

  32、實現了NamedNodeMap介面的物件中包含了可以透過名字來訪問的一組節點的集合。

  不過注意,NamedNodeMap並不是從NodeList繼承過來的,它所包含的節點集中的節點是無序的。儘管這些節點也可以透過索引來進行訪問,但這只是提供了列舉NamedNodeMap中所包含節點的一種簡單方法,並不表明在DOM規範中為NamedNodeMap中的節點規定了一種排列順序。

  NamedNodeMap表示的是一組節點和其唯一名字的一一對應關係,這個介面主要用在屬性節點的表示上。與NodeList相同,在DOM中,NamedNodeMap物件也是"live"的。

  33、利用DOM,程式開發人員可以動態地建立文件,遍歷文件結構,新增、修改、刪除文件內容等等。

  我們將透過微軟的XML分析器msxml,對DOM介面的這些應用做的介紹。

  使用不同的程式語言建立Document物件的範例。

  JScript:

  var doc = new ActiveXObject("Microsoft.XMLDOM") 

  VB Script:

  Dim docSet doc = CreateObject("Microsoft.XMLDOM")

  VB:

  Dim doc As ObjectSet 

  doc = CreateObject("Microsoft.XMLDOM")

  或者

  Dim doc As DOMDocumentSet doc = New DOMDocument

  VC:

  HRESULT hr = CoCreateInstance

  (CLSID_DOMDocument,NULL,CLSCTX_INPROC_SERVER,IID_IXMLDocument(LPVOID*),&m_pXMLDocument);

  34、Document的載入

  不同的XML分析器所提供的載入XML文件的方法也不盡相同。

  在微軟的msxml中,提供了一個load方法來載入XML文件,建立DOM樹同XML文件之間的關聯。

  依舊以聯絡人列表資訊的XML文件.xml為例,可透過下述方式來載入文件:

  Dim myDocumentSet myDocument = CreateObject("microsoft.xmldom")

  myDocument.async = FalsemyDocument.load("client.xml") 

  35、對DOM樹的操作::

  首先,我們要獲取XML文件的根元素節點,用VBScript語言描述這個操作如下:

  root = myDocument.documentElement 

  該語句的實際含義如下圖黃色箭頭所示。

  在得到了文件的根元素節點之後,我們又將如何訪問其他元素呢?以文件中的第二個person元素為例,

  對該元素節點以及其子節點的訪問可以透過下面的方式來實現:

  personNode = root.childNodes.item(1)

  nameNode = personNode.childNodes.item(0)

  textNode = nameNode.childNodes.item(0)

  theName = textNode.nodevalue 

  上述訪問語句執行後,theName的值是"李四"。下圖黃色箭頭給出了這一訪問過程的示意:

  在上面的程式碼中,root是文件的根元素節點addressbook節點,personNode和nameNode都是元素型別的節點,textNode是TEXT型別的節點,theName是一個字串。

  childNodes是NodeList型別的屬性,item是NodeList介面中Node型別的屬性,透過item可以訪問NodeList節點集合中的任意節點(這兒有一點需要注意,當我們要訪問根元素節點addressbook的第二個person子節點personNode時,

  我們用的索引引數是"1",這是因為item中的索引引數是從0開始的,如果我們要訪問節點集合中的第一個節點,則應該用item(0)來表示)。

  在DOM規範中,要訪問元素節點的文字內容,需要先得到元素節點的TEXT子節點,再透過TEXT節點的屬性獲取文字內容。微軟在實現DOM介面時對DOM進行了部分擴充套件,可以透過元素型別節點的text屬性直接獲得元素中的文字內容。具體實用說明可以參考微軟msdn中的幫助。

  上面的例子給出瞭如何訪問DOM樹中的元素節點,

  對於DOM樹中的屬性節點,訪問方法略有不同,可以透過下面的語句來實現:

  attr = node.attributes.getNamedItem("sex")

  attrContent = attr.nodevalue 

  上述訪問語句執行後,attrContent的值是"male"。下圖用黃色箭頭標出了這一訪問的過程。

  在上面的程式碼中,attr是屬性型別的節點,attributes是NamedNodeMap型別的屬性,getNamedItem是NamedNodeMap介面中的方法。屬性的內容可以透過屬性節點的nodevalue來獲得。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-950296/,如需轉載,請註明出處,否則將追究法律責任。

相關文章