[ZZ]C#中XML的基本应用

  在学习之前,我们通过一个Hello World的例子检查自己的机器是否已经MSXML3
  第一步:建立要输入XML文档hello.xml

 

  
    
<? xml version="1.0" encoding=" GB2312" ?>
< greeting > Hello, world! </ greeting >

  这是一个很简单XML文档,只包含一个节点的XML结构树。
  第二步:建立XSLT文档hello.xsl。提示:默认的XSLT文件的后缀名为.xsl

 

  
    
<? xml version="1.0" encoding=" GB2312" ?>
< xsl:stylesheet xmlns:xsl ="http://www.w3.org/TR/WD-xsl" >
< xsl:template match ="/" >
< html >
< head >
< title > First XSLT example </ title >
</ head >
< body >
< p >< xsl:value-of select ="greeting" /></ p >
</ body >
</ html >
</ xsl:template >
</ xsl:stylesheet >

  你现在可以用IE5.0以上版本浏览器打开这个hello.xsl文件,看到XSL的结构树。
  第三步:在XML中调用这个XSL文件。修改hello.xml的代码为:

  
    
<? xml version="1.0" encoding=" GB2312" ?>
<? xml-stylesheet type="text/xsl" href="hello.xsl" ?>
< greeting > Hello, world! </ greeting >

  ok,到这一步原理上已经完成了所有的代码,接下来只要用一个XSLT的处理器(XML Processor)来执行hello.xml就可以看到"hello world"的显示结果了。在微软的IE5.5内嵌了MSXML3解释器,你可以用IE5.5打开hello.xml文件,就可以看到结果。如果只看到XML结构树,不是单独的"hello world"字样,说明你的浏览器没有安装MSXML3版本。 

   我们要通过C#XML文件进行操作就需要引入.NET Framework提供的专门操作XML的类和方法。

 

  
    
using System.XML;

  通过 XmlTextReader 类可以实现对于一个 XML 文件进行从前至后的访问,并根据我在上一篇随笔中对于这个类的介绍中提到的 Read() 方法访问其中的内容,下面给出一段示例代码:
  
    
XmlTextReader reader = new XmlTextReader(pathToXmlDoc);
int elementCount = 0 ;
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
elementCount
++ ;
}
}

  第1行定义了一个XmlTextReader对象,然后根据对其进行实例化时的xml文件所在路径参数pathToXmlDoc指定这个对象所对应的xml文件。3行通过其Read()方法顺序读取xml文件中的内容,并在第5行判断当前读取的节点是否为一个元素节点。整个程序实现了计算xml文件中节点的个数。

  因为XmlTextReader这种读取xml文件的方法对于xml文件来说是只读的,不允许执行插入、删除或者更新xml文档节点的操作。我们要实现对xml文件更灵活的操作就需要另一个类XmlDocument。我们先看一段示例代码然后作出详细解释:

 

  
    
XmlDocument xmlDoc = new XmlDocument();
XmlDoc.Load(pathToXmlDoc);
XmlElement root
= xmlDoc.DocumentElement;
XmlElement newNode
= xmlDoc. CreateElement ( " newNode " );
newNode.SetAttribute(
" id " , " 1 " );
root.AppendChild(newNode);

  第1行先实例化了一个XmlDocument对象。第2行通过其Load()方法,根据路径参数pathToXmlDoc加载相应路径下的xml文件。第3行实例化了一个XmlElement对象,并通过DocumentElement属性获取当前文档的根。第4行又实例化了一个XmlElement对象并通过XmlDocumentCreateElement方法创建一个元素节点,在第5行设置这个元素的属性,然后再在第6行将这个节点添加到了文档的根节点下。整段代码实现了从一个文件中加载xml,然后在根节点root下添加一个子元素以及它的相关属性。在根节点下会添加出这样一个节点。

  

  
    
< root >
< newNode id ="1" />
</ root >

  C#中不仅可以通过上面这种方法向xml文档中添加数据,还可以通过另一种方法是先这个功能。就是可以将按照xml标准写好的字符串加载到xml文档中。这需要用到XmlDocument类的LoadXml方法来实现,请看下面的应用:

  
    
string myXml = " <root><someNode>Hello</someNode></root> " ;
XmlDocument xmlDoc
= new XmlDocument();
xmlDoc.LoadXml(myXml);

  最后,给出一个完整的代码段来实现向一个xml文档中插入数据并保存为InsertedDoc.xml

  
    
try
{
XmlNode currNode;
XmlDocument doc
= new XmlDocument();
doc.LoadXml(
" <XMLFile> " + " <SomeData>Old Data</SomeData> " + " </XMLFile> " );
XmlDocumentFragment docFrag
= doc.CreateDocumentFragment();
docFrag.InnerXml
= " <Inserted> " + " <NewData>Inserted Data</NewData> " + " </Inserted> " ;
// insert the availability node into the document
currNode = doc.DocumentElement.FirstChild;
currNode.InsertAfter(docFrag, currNode.LastChild);
// save the output to a file
doc.Save( " InsertedDoc.xml " );
}
catch (Exception e)
{
Console.WriteLine (
" Exception: {0} " , e.ToString());
}

  代码执行后,新文档的内容如下:

  
    
< XMLFile >
< SomeData >
Old Data
< Inserted >
< NewData > Inserted Data </ NewData >
</ Inserted >
</ SomeData >
</ XMLFile >

原文出处:http://www.cnblogs.com/Bear-Study-Hard/archive/2006/01/05/311675.html

基本应用还是比较简单的,还有很多可以扩展的:

http://www.cnblogs.com/Bear-Study-Hard/archive/2005/12/31/308792.html

http://www.cnblogs.com/xdesigner/archive/2008/05/19/1202313.html   

http://www.cnblogs.com/xdesigner/archive/2008/05/21/1203728.html

你可能感兴趣的:(xml)