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() 方法访问其中的内容,下面给出一段示例代码:
1  XmlTextReader reader  =   new  XmlTextReader(pathToXmlDoc);
2  int  elementCount  =   0 ;
3  while  (reader.Read())
4  {
5       if  (reader.NodeType  ==  XmlNodeType.Element)
6      {
7          elementCount ++ ;
8      }
9  }
        第 1 行定义了一个 XmlTextReader 对象,然后根据对其进行实例化时的 xml 文件所在路径参数 pathToXmlDoc 指定这个对象所对应的 xml 文件。 3 行通过其 Read() 方法顺序读取 xml 文件中的内容,并在第 5 行判断当前读取的节点是否为一个元素节点。整个程序实现了计算 xml 文件中节点的个数。
         因为 XmlTextReader 这种读取 xml 文件的方法对于 xml 文件来说是只读的,不允许执行插入、删除或者更新 xml 文档节点的操作。我们要实现对 xml 文件更灵活的操作就需要另一个类 XmlDocument 。我们先看一段示例代码然后作出详细解释:
1  XmlDocument xmlDoc  =   new  XmlDocument();
2  XmlDoc.Load(pathToXmlDoc);
3  XmlElement root  =  xmlDoc.DocumentElement;
4  XmlElement newNode  =  xmlDoc. CreateElement ( " newNode " );
5  newNode.SetAttribute( " id " , " 1 " );
6  root.AppendChild(newNode);
        第 1 行先实例化了一个 XmlDocument 对象。第 2 行通过其 Load() 方法,根据路径参数 pathToXmlDoc 加载相应路径下的 xml 文件。第 3 行实例化了一个 XmlElement 对象,并通过 DocumentElement 属性获取当前文档的根。第 4 行又实例化了一个 XmlElement 对象并通过 XmlDocument CreateElement 方法创建一个元素节点,在第 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 >

本文出自 “努力学习的小熊” 博客,转载请与作者联系!

你可能感兴趣的:(xml,职场,应用,休闲)