访问xml数据的3种模式
2007-06-01 08:46
429 查看
基于树模型的 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);
}
}
访问xml数据
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();//建立文档对象
try
{
doc.Load("../../myOrder.xml");//加载xml对象
XmlNode root = doc.DocumentElement;//获取文档根节点
XmlNode tempNode;
if (root.HasChildNodes)
{
tempNode = root.FirstChild;//根结点的第一个字节点
}
else
{
tempNode = root;
}
while (tempNode != root)
{
Console.Write(tempNode.Name);
tempNode = tempNode.FirstChild;//获取节点的字节点
//判断是否是文本节点
if (tempNode.GetType().Name == "XmlText")
{
Console.WriteLine(":" + tempNode.Value);
while (tempNode.NextSibling == null && tempNode != root)
{
tempNode = tempNode.ParentNode;
}
if (tempNode != root)
tempNode = tempNode.NextSibling;//获取下一个节点
}
else
{
Console.WriteLine();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();//辅助代码,用于保留控制台窗口
}
}
}
转自:http://www.cnblogs.com/xiangxiang/archive/2006/09/13/503499.html
树模型 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);
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();//建立文档对象
try
{
doc.Load("../../myOrder.xml");//加载xml对象
XmlNode root = doc.DocumentElement;//获取文档根节点
XmlNode tempNode;
if (root.HasChildNodes)
{
tempNode = root.FirstChild;//根结点的第一个字节点
}
else
{
tempNode = root;
}
while (tempNode != root)
{
Console.Write(tempNode.Name);
tempNode = tempNode.FirstChild;//获取节点的字节点
//判断是否是文本节点
if (tempNode.GetType().Name == "XmlText")
{
Console.WriteLine(":" + tempNode.Value);
while (tempNode.NextSibling == null && tempNode != root)
{
tempNode = tempNode.ParentNode;
}
if (tempNode != root)
tempNode = tempNode.NextSibling;//获取下一个节点
}
else
{
Console.WriteLine();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();//辅助代码,用于保留控制台窗口
}
}
}
转自:http://www.cnblogs.com/xiangxiang/archive/2006/09/13/503499.html
相关文章推荐
- 访问xml数据的3种模式
- 数据访问两种模式的比较
- 访问webservice,导入xml至本地数据集
- 以对象的方式来访问xml数据表(二)
- “前端展示SL后台数据调取java”这种开发模式的跨域访问失败解决方案
- XML校验学习之一:使用XSD模式验证XML数据
- Entity Framework技术系列之2:三种开发模式实现数据访问
- 连接模式数据访问
- Ajax跨域访问XML数据的另一种方式——使用YQL查询语句
- 大数据IMF传奇行动 java maven工程(pom.xml配置) 本地模式运行词频统计
- 连线模式数据访问DataReader
- Java数据访问对象模式
- Flex 3处理数据 访问 XML 数据2
- javaee只需一个数据引擎访问点的单例模式
- 数据访问模式:数据并发控制(Data Concurrency Control)
- 用Mybatis JDBC访问 Oracle的XMLType数据类型
- 以对象的方式来访问xml数据表(三)
- PHP设计模式系列 - 数据访问对象模式
- PHP设计模式之适配器模式,建造者模式,数据访问对象模式
- 【Android核心基础02】 - 界面布局、测试、数据存储访问、权限控制、XML