U Have Website We have Cash
If you have website put our banner on it, make money for each visitor
dollarsincome.com

想想

女人一定要有勇气,无论是对爱情也好,对生活也好。如果什么事总是畏首畏尾,那么人生就白白流过了.

导航

访问xml数据的3种模式

基于树模型的 API
树模型 API 将 XML 文档呈现为由节点组成的树,这个树通常可以立即加载到内存中。最常用的 XML 树模型 API 是 W3C 文档对象模型 (DOM)。DOM 支持以编程方式读取、处理和修改 XML 文档。

以下示例使用 .NET Framework 中的 XmlDocument 类获取
items
元素中第一个
compact-disc
的艺术家姓名和标题。

using System;
using System.Xml;

public class Test{

public static void Main(string[] args){

XmlDocument doc = new XmlDocument();
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);
}
}

posted on 2006-09-13 19:03  想想  阅读(280)  评论(0编辑  收藏  举报