DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 訪問XML數據的三中基於樹模型||基於游標||流式API比較
訪問XML數據的三中基於樹模型||基於游標||流式API比較
編輯:XML詳解     
無處不在的 XML

  除了可以表示結構化和半結構化的數據之外,XML 還有許多其他特性,使其成為一種被廣泛采用的數據表示格式。XML 是可擴展的,與平台無關的,並且由於其完全采用 Unicode 而支持國際化。XML 是基於文本的格式,因此,用戶可以根據需要使用標准的文本編輯工具讀取和編輯 XML 文檔。

  XML 的可擴展性表現在多個方面。首先,與 Html 不同,XML 沒有固定的詞匯表。相反,用戶可以使用 XML 定義特定的應用程序或行業專用的詞匯表。其次,與使用其他格式的應用程序相比,處理或使用 XML 格式的應用程序對 XML 結構的更改更具“抵抗力”,只要這些更改是附加的。例如,如果某個應用程序主要處理具有

  在交換文檔的過程中,XML 架構可以描述 XML 生成程序與使用程序之間的約定,因為它描述了這二者之間的有效 XML 消息的組成。雖然存在大量用於 XML 的架構語言,從 DTD 到 XDR,但目前最權威的是 W3C XML 架構定義語言,通常簡稱為 XSD。

  XSD 在 XML 架構語言中是獨一無二的,因為它最先嘗試擴展 XML 架構的作用,使之不再局限於僅用來描述兩個實體交換文檔時的約定。XSD 引入了“後架構驗證信息集 (Post Schema Validation Infoset,PSVI)”的概念。一個完整的 XSD 處理器接受 XML 信息集作為輸入,並在驗證時將其轉換為後架構驗證信息集 (PSVI)。PSVI 是初始的輸入 XML 信息集,帶有添加的新信息項和添加到現有信息項中的新屬性。W3C XML Schema 推薦列出了後架構驗證的信息集的組成要素。

  類型注釋是 PSVI 組成要素中很重要的一類。元素和屬性需進行嚴格的類型定義,並具有與之相關的數據類型信息。經過嚴格類型定義的 XML 有很多用途,可以使用 .NET Framework 的 XmlSerializer 等技術將其映射到對象,可以使用 SQLXML 和 .Net Framework 的 DataSet 技術將其映射到關系表格,或者使用利用了嚴格類型機制的 XML 查詢語言,如 XPath 2.0 和 XQuery 對其進行處理。

  以下示例是一個架構片段,描述了 XML 文檔剖析 一節中示例文檔的 items元素。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="items">
 doc.Load("test.XML");

    XmlElement firstCD = (XMLElement) doc.DocumentElement.FirstChild;
XMLElement artist  =
(XMLElement) firstCD.GetElementsByTagName("artist")[0];
    XMLElement title   =
(XMLElement) firstCD.GetElementsByTagName("title")[0]

    Console.WriteLine("Artist={0}, Title={1}", artist.InnerText, title.InnerText);
  }
}

  基於游標的 API

  XML 游標 API 就像在 XML 文檔中移動的鏡頭,對准被定向的文檔的各個方面。.Net Framework 中的 XPathNavigator 類就是一個 XML 游標 API。XML 游標 API 與樹模型 API 相比,具有不必將整個文檔加載到內存中的優勢,這樣便於對 XML 生成程序中按需生成文檔的部分進行優化。

以下示例使用 .Net Framework 中的 XPathNavigator 類獲取 items元素中第一個 compact-disc的藝術家姓名和標題。

using System;
using System.XML;
using System.XML.XPath;

public class Test{

  public static void Main(string[] args){

    XmlDocument doc = new XMLDocument();
    doc.Load("test.XML");

    XPathNavigator nav = doc.CreateNavigator();

    nav.MoveToFirstChild(); //從根節點移至文檔元素 (items)
nav.MoveToFirstChild(); //從 items 元素移至第一個 compact-disc 元素
   
    //從 compact-disc 元素移至 artist 元素
    nav.MoveToFirstChild();
    nav.MoveToNext();
    string artist = nav.Value;

    //從 artist 元素移至 title 元素
    nav.MoveToNext();
    string title = nav.Value;

    Console.WriteLine("Artist={0}, Title={1}", artist, title);
  }
}

  流式 API

  使用處理 XML 的流式 API 時,用戶只需在內存中存儲要處理的當前節點的上下文,即可處理 XML 文檔。此類 API 可以處理大型的 XML 文件,而不會占用龐大的內容空間。用於 XML 處理的流式 API 主要有兩種類型:基於推進的 XML 分析器和基於拉出的 XML 分析器。

  基於推進的分析器(如 SAX)的工作方式是在 XML 數據流中移動,並在遇到 XML 節點時將事件“推進”到已注冊的事件處理程序(回調方法)。基於拉出的分析器(如 .Net Framework 中的 XmlReader 類)則在 XML 數據流中用作只向前的游標。

  以下示例使用 .Net Framework 中的 XMLReader 類獲取 items元素中第一個 compact-disc的藝術家姓名和標題。

using System;
using System.XML;

public class Test{

  public static void Main(string[] args){

    string artist = null, title = null;
    XmlTextReader reader = new XmlTextReader("test.XML");

    reader.MoveToContent(); //move from root node to document element (items)

    /* 保持讀取,直至獲得第一個 <artist> 元素 */
 while(reader.Read()){

      if((reader.NodeType == XMLNodeType.Element) && reader.Name.Equals("artist")){

        artist = reader.ReadElementString();
        title  = reader.ReadElementString();
        break;

      }
    }
    Console.WriteLine("Artist={0}, Title={1}", artist, title);
  }
}

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved