.NET中用于处理XML的方法和相关类

原创 2003年12月08日 12:03:00

本文是本人研读《.NET XML高级编程》时的一些感想和体会,希望对想进行.NET XML编程的初级读者有用。

 

对于使用.NET进行XML编程的朋友们们来说,不知你们有没有这样的感觉:.NET虽然内嵌了不少用于处理XML的类和方法,如:XmlReader,XmlWriter,XmlDocument,XPathDocument,XPathNavigator,XslTransfrom以及作为COM组件提供的DOMDocument。但每每真正进行XML编程的时候总是感觉无从下手,到底这些类都是干什么的,是都要用呢还是只需要用哪一些就可能了并且如何用。所以虽然对于.net提供的处理XML的强大功能,也只能望而却步。好了,有了这篇文章,你会对.net中的XML的使用有一个清淅的认识和理解,我想这点对你来说应该足够了。

 

总的来说,在.NET中处理XML的方法可以分为XML托管类和COM组件两大类:

1、  使用XML托管类<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

XML托管类又分为由.NET全新实现的基于流的API和基于传统的DOM编程模型的API两类,这两类都位于System.Xml程序集中。该程序集包含直接处理XML文档的对象(其中既包括仅前向的非缓存的访问对象(与SAX类似),又包括将整个文档加载到内存的随机访问对象(类似于文档对象模型DOM)),以及包括一些助手类(如用于改进MSXML分析器性能的名称表类等)。

A、由.NET全新实现的基于流的API(XmlReader与XmlWriter)

它们是使用一个流型I/O模型(仅前向的非缓存的访问模型)。XmlReader用于处理XML文档,而XmlWriter用于产生XML文档(串行化)。它们成为替代传统DOM方法(见B)的极好方法,因为流型模型不需要高代价的内存缓存。

XmlReader提供了可以用来在文档中进行导航的方法(主要是逐个节点访问的方法和一些用于快速导航的助手方法),同时还提供了可以读取当前节点信息的方法。

 

// 示例程序:使用XmlReader类从XML文件中读取一个XML

using System;

using System.Xml;

 

class Class1

{

   static void Main(string[] args)

   {

      XmlTextReader reader = null;

      int iCount = 0;

      try

      {

         reader = new XmlTextReader(@"c:/1.xml");

         while (reader.Read())

         {

            if (reader.NodeType == XmlNodeType.Element)

            iCount++;

         }

         Console.Write("Total {0} Elements found!", iCount);

      }

      finally

      {

         if (reader != null)

         reader.Close();

      }

   }

}

 

// 示例程序:使用XmlWriter类逐个节点地来创建格式正确的XML文档

using System;

using System.Xml;

 

class Class1

{

   static void Main(string[] args)

   {

      XmlTextWriter writer = new XmlTextWriter(Console.Out);

      writer.Formatting = Formatting.Indented;

 

      writer.WriteStartDocument();

 

      writer.WriteStartElement("Person");

      writer.WriteAttributeString("Sex", "Male");

      writer.WriteAttributeString("FirstName", "Sunny");

      writer.WriteAttributeString("LastName", "Bajaj");

      writer.WriteElementString("Phone", "111-111-1111");

      writer.WriteElementString("Phone", "222-222-2222");

      writer.WriteEndElement();

 

      writer.WriteEndDocument();

 

      writer.Flush();

      writer.Close();

   }

}

B、基于传统的DOM编程模型的API(DOM、XPath、XSLT)

I、DOM

使用DOM API,整个XML文档将被加载到内存(缓存),API允许对内存XML文档进行导航和编辑,可以用DOM来创建一个XML文档,然后将它保存到一个文件,或将它发送到一个流中等。在.NET中,DOM的加载机制是建立在XmlReader类上的,而DOM串行化是建立在XmlWriter类上的。核心的类是XmlDocument(它等价于COM组件中的MSXML DOMDocument伴随类,两者的用法也很相似),它的重要方法是Load()LoadXML()方法。

II、XPath

.NET中,XPath命名空间支持文档导航。XPath的功能是通过XPathNavigator类来实现的。

 

// 示例程序:演示XPath的用法

// c:/1.xml

<?xml version="1.0" encoding="IBM437"?>

<Person Sex="Male" FirstName="Sunny" LastName="Bajaj">

   <Phone>111-111-1111</Phone>

   <Phone>222-222-2222</Phone>

</Person>

 

using System;

using System.Xml.XPath;

class Class1

{

   static void Main(string[] args)

   {

      XPathDocument doc = new XPathDocument(@"c:/1.xml");

      XPathNavigator nav = doc.CreateNavigator();

      XPathNodeIterator iter = nav.Select("/Person/Phone");

 

      while (iter.MoveNext())

      {

         Console.WriteLine("Phone: {0}", iter.Current.Value);

      }

   }

}

 

III、XSLT转换

用于将XML从一种格式转换为另一种格式。核心类是XslTransform,该类的重要方法是Load()Transform()

 

// 示例程序:将c:/1.xml使用c:/1.xsl转换成另一种XML并输出

// c:/1.xsl文件

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 

   <xsl:output indent="yes" method="xml" />

   <xsl:template match="Person">

      <Person>

         <Sex><xsl:value-of select="@Sex" /></Sex>

         <FName><xsl:value-of select="@FirstName" /></FName>

         <LName><xsl:value-of select="@LastName" /></LName>

      </Person>

   </xsl:template>

 

   <xsl:template match="/">

      <xsl:apply-templates />

   </xsl:template>

 

</xsl:stylesheet>

 

// XslTransformExample.cs

using System;

using System.Xml;

using System.Xml.XPath;

using System.Xml.Xsl;

 

class Class1

{

   static void Main(string[] args)

   {

      //load input document

      XmlDocument doc = new XmlDataDocument();

      doc.Load(@"c:/1.xml");

      XPathNavigator nav = doc.CreateNavigator();

 

      //Load XSLT document

      XslTransform docXSL = new XslTransform();

      docXSL.Load(@"c:/1.xsl");

 

      //Apply transformation and send output to console

      docXSL.Transform(nav, null, Console.Out);

   }

}

 

如果正在编写ASP.NET Web应用程序,且需要显示一个XML文档或者需要用服务器端XML样式表(即.xsl文件)对一个XML文档进行转换,这可能需要使用XML Web服务器控件<asp:Xml…>

二、使用COM组件(COM互操作)

   当在.NET中处理XML时,应尽量使用System.Xml程序集中的XML类,而不要通过COM的互操作性来使用MSXML

   假设最新版本的MSXML提供了一些.NET XML托管类(即System.Xml程序集)所不支持的功能,这时我们就有必要在.NET应用程序中通过COM互操作性的机制来使用MSXML了。它位于COM选项卡中的Microsoft XML Parser MSXML 3.0

   // 示例程序:使用MSXML

   using System;

   using MSXML2;

 

   class Class1

   {

static void Main(string[] args)

{

   DOMDocument30 doc = new DOMDocument30();

   doc.load(@”c:/books.xml”);

   Console.Write(doc.xml);

}

   }

 

好了,由于时间关系,先写到这儿。以后我会在适当的时候推出本文详细的版本,希望各位留意。

view类的xml属性、相关方法及说明

View类是所有可视化控件的基类,主要提供了控件绘制和事务处理的方法。创建用户界面所使用的控件都继承自View,如EditText、TextView、Button等。View及其子类的相关属性,既可以...
  • u012587637
  • u012587637
  • 2014年04月08日 11:21
  • 983

.Net中处理XML的常用API

.Net中处理XML的常用API    .Net对XML提供了丰富的API,但大多数都在日常开发中涉及不到。先总结下一些使用频繁的API与大家分享。测试数据bookstore.xml ...
  • ghostbear
  • ghostbear
  • 2012年03月09日 11:41
  • 3740

BroadcastReceiver类中方法

构造函数 public BroadcastReceiver () 公共方法 public final void abortBroadcast () 设置标识,指示这个接收器应该终止...
  • zhaoyazhi2129
  • zhaoyazhi2129
  • 2014年10月24日 15:07
  • 1719

java基础4:String与StringBuffer及基本数据类型包装类

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来。 ------------------------------------------------...
  • jin870132
  • jin870132
  • 2015年04月07日 23:20
  • 1107

.NET 框架中的 XML

可扩展标记语言 (XML) 是元标记语言,它提供描述结构化数据的格式。XML 支持生成新一代的基于 Web 的数据查看和操作应用程序。XML 是用于 Web 上的数据的通用语言。XML 使开发人员能够...
  • hb226
  • hb226
  • 2006年05月01日 09:45
  • 808

c#中is关键字与as关键字的区别与使用

c#中is关键字与as关键字的区别与使用 转载请注明出自朱朱家园http://blog.csdn.net/zhgl7688 is关键字是判断类型,用于检查对象是否与给定类型兼容,不成功则不会抛...
  • zhgl7688
  • zhgl7688
  • 2015年02月17日 21:53
  • 951

JSP开发业务应用

1.使用分页显示数据在方便页面浏览的同时,由于限制数据读取显示的数量,因而减少了 与数据库交换时的资源占用 2.实现数据分页显示,需要经过的步骤如下 (1)确定每页显示的数据数量 (2)确定分...
  • qq_38173841
  • qq_38173841
  • 2017年06月12日 17:17
  • 101

Java中String类常用方法(字符串中的子字符串的个数)

重点内容 4种方法: 1、int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引。 ...
  • weixin_38429587
  • weixin_38429587
  • 2017年10月17日 08:40
  • 154

asp.net的XML通用操作类

using System;using System.Xml;using System.Data;namespace Message.Common{ /**//// ///...
  • eee365
  • eee365
  • 2009年09月05日 12:53
  • 2531

.net中xml文件的基本操作

上周做程序的时候用到了一些xml的知识,今天对这一知识点做一小小的总结,若有不足之处还望见谅!首先呢,xml文件最重要的就是可以让用户自己定义结点,子结点及属性,这使得存取信息资源更加方便,上面说的这...
  • zhanglei5415
  • zhanglei5415
  • 2007年04月04日 10:24
  • 824
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.NET中用于处理XML的方法和相关类
举报原因:
原因补充:

(最多只允许输入30个字)