现在的位置: 首页 > 综合 > 正文

C#的XML

2014年02月17日 ⁄ 综合 ⁄ 共 3879字 ⁄ 字号 评论关闭

一、XML基础知识

1   XML (Extensible Markup language)  可扩展性标记语言!  先说这个可扩展性,大家都知道,html标签是不允许我们自定义的,<a>,<br>等等,都是已经成为规则,不能更改!但是,XML里面的标签是允许我们自定义的~!这就是他的可扩展性。

 

2   XML是什么?XML是以一种简单的文本格式存放数据的方式,这也说明了,他可以被任何计算机读取。

 

3   XML文档:XML中完整的数据集就是XML文档。XML文档最重要的是XML元素,XML元素包含了XML属性(特性)。

 

4   XML文档的要求:   1) 有且只有一个根元素     2)每一个元素都有一个结束标记      3)没有重叠的元素-------所有的元素都必须完全嵌套在父元素内,元素不能交叉!     4)所有的属性必须放在括号内!

 

5:节点  XML文档的各个部分称为节点,因此,元素(XmlElement类),特性(XmlAttribute类),元素内的文本(XmlText类)都是节点。这三种节点都派生于XmlNode节点。

 

6    <?xml version="1.0"?>  是XML的声明格式。元素的名称一直都是xml ,并且必须拥有特性 version。特性只能使用1.0

 

7   XML的元素区分大小下。html中 <br>和<BR>是一样的。但是在XML中<book>和<BOOK>绝对不是同一个东西!

 

下面看一下一个XML文档(xmlTest.xml)

<?xml version="1.0"?>
<books>
  <book>
    <title>Beginning Visual C# 4.0 </title>
    <author>Karli Watson</author>
    <code>7582</code>
  </book>
  <book>
    <title>Professional C# 2nd Edition 4.0 </title>
    <author>Simon Robinson</author>
    <code>7043</code>
  </book>
</books>

 

 

二、XML内容的读取

 

XML的DOM(Document Object Model)文本对象模型。这里的DOM和javascript里html对应的DOM一样(把HTML结构描述为一棵树)。我们对XML文档进行操作,也是通过DOM进行的!.net为我们提供了DOM类库,他们在System.XML名称空间里。接下来,分别介绍他们常用的几个类!

 

XmlNode类:表示了一个节点,在摸种程度上,可以认为他的作用相似C#类库里面的Object类,就是说,是别的XML类的父类。

 

XmlDocument类:表示了XML文档对象。

 

XmlElement类:其对象表示了元素的节点。

 

XmlAttribute类:其对象表示了特性节点。

 

XmlText类:其对象表示了文本节点。

 

他们的一些属性:ChildNodes      :返回该节点的所有子节点

                             ParentsNode    :返回该节点的父节点

                             FirstChild          :返回该节点的第一个子节点

                             LastChild          :返回该节点的最后一个子节点

                             HasChildNodes:判断该节点是否有子节点。

                             NextSibling       :返回与该节点具有相同父节点的下一个兄弟节点。

                              name               :节点的名字

                              innerText         :以一个字符串的形式,返回这个节点的所有子节点的文本。

                              innerXML         :类似于innerText

                              value                :返回节点的值,一般只有XmlAttribute和XmlText里面有!

 

现在我用C#控制台程序读取上面的那个xmlTest.xml文档的所有内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
using System.Threading;
using System.IO;
using ConsoleApplication4;
using System.Xml;

namespace XMLTest
{
    public class XmlTest
    {
      
        static void Main(string[] args)
        {

            XmlDocument xd = new XmlDocument();
            xd.Load(@"E:\学习\ConsoleApplication4\ConsoleApplication4\XMLTest.xml");
            XmlElement xe = xd.DocumentElement;
            getContext(xe as XmlNode);
            Console.Read();
        }
        public static void getContext(XmlNode xn)
        {
           
           if(xn is XmlText)
           {
               
              
               Console.WriteLine(xn.Value);
              
           }
           if (xn.HasChildNodes)
           {
               foreach(XmlNode xn1 in xn.ChildNodes )
               {
                 
                   getContext(xn1);
               
               }
           }
           else
           {
               return;
           }
        
        }
    }
}

结果:

 

如果我想只读取其中个别元素节点的内容呢?比如我只想读取<title></title>里面标题的内容。可以这样:

namespace XMLTest
{
    public class XmlTest
    {
      
        static void Main(string[] args)
        {

            XmlDocument xd = new XmlDocument();
            xd.Load(@"E:\学习\ConsoleApplication4\ConsoleApplication4\XMLTest.xml");
            XmlElement xe = xd.DocumentElement;
            getContext(xe as XmlNode);
            Console.Read();
        }
        public static void getContext(XmlNode xn)
        {
           
           if(xn is XmlText)
           {
               
               if(xn.ParentNode.Name=="title")
               Console.WriteLine(xn.Value);
              
           }
           if (xn.HasChildNodes)
           {
               foreach(XmlNode xn1 in xn.ChildNodes )
               {
                   if (xn1 is XmlElement)
                   {
                       if(xn1.Name=="title")
                       {
                        Console.Write(xn1.Name+":");
                       
                       }
                      
                   }
                   getContext(xn1);
               
               }
           }
           else
           {
               return;
           }
        
        }
    }
}

结果:

 其实还有别的更简单的方法!

使用XmlNodeList类:XmlNodeList,看它的样子,就知道是个集合,对,就是一些节点的集合!

使用这个类,需要使用XPath的内容,XPath是XML的查询语言!就像SQL是数据库的查询语言一样。以后再说吧!

 

三、XML节点值得修改

       原理:找到目的节点------->修改其内容---------->使用XmlDocument的Save(“路径”)方法保存,这就行了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Timers;
using System.Threading;
using System.IO;
using System.Xml;

namespace XMLTest
{
    public class XmlTest
    {

        static void Main(string[] args)
        {

            XmlDocument xd = new XmlDocument();
            xd.Load(@"E:\学习\ConsoleApplication4\ConsoleApplication4\XMLTest.xml");
            XmlElement xe = xd.DocumentElement;
            getContext(xe as XmlNode);
            xd.Save(@"E:\学习\ConsoleApplication4\ConsoleApplication4\XMLTest.xml");//再一次强调 ,一定要记得保存的该XML文件
            Console.Read();
        }
        public static void getContext(XmlNode xn)
        {

            if (xn is XmlText)
            {

                if (xn.Value == "7582")
                { 
                    xn.Value = "0000";     //修改节点的内容!
                }

            }
            if (xn.HasChildNodes)
            {
                foreach (XmlNode xn1 in xn.ChildNodes)
                {

                    getContext(xn1);

                }
            }
            else
            {
                return;
            }

        }
    }
}

  

【上篇】
【下篇】

抱歉!评论已关闭.