C#編程 XML文檔

XML 指可擴展標記語言,XML 被設計用來傳輸和存儲數據。XML 被設計用來結構化、存儲以及傳輸信息。node

 

xml文檔展現

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

這個 XML 文檔仍然沒有作任何事情。它僅僅是包裝在 XML 標籤中的純粹的信息。咱們須要編寫軟件或者程序,才能傳送、接收和顯示出這個文檔。ide

第一行是 XML 聲明。它定義 XML 的版本 (1.0) 和所使用的編碼 (ISO-8859-1 = Latin-1/西歐字符集)。編碼

下一行描述文檔的根元素(像在說:「本文檔是一個便籤」):<note>spa

接下來 4 行描述根的 4 個子元素(to, from, heading 以及 body):設計

    <to>George</to>code

    <from>John</from>orm

    <heading>Reminder</heading>xml

    <body>Don't forget the meeting!</body>blog

最後一行定義根元素的結尾: </note>文檔

 

XML 文檔造成一種樹結構

XML 文檔必須包含根元素。該元素是全部其餘元素的父元素。

XML 文檔中的元素造成了一棵文檔樹。這棵樹從根部開始,並擴展到樹的最底端。 全部元素都可擁有子元素:

<root>
  <child>
    <subchild>.....</subchild>
  </child>
  <child>
    <subchild>.....</subchild>
  </child>
</root>

 

XML 元素

XML 元素指的是從(且包括)開始標籤直到(且包括)結束標籤的部分。

<bookstore>
<book category="CHILDREN">
  <title>Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title>Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore>

<bookstore> 和 <book> 都擁有元素內容,由於它們包含了其餘元素。<author> 只有文本內容,由於它僅包含文本。

只有 <book> 元素擁有屬性 (category="CHILDREN")。

 

xml語法規則

全部 XML 元素都須有關閉標籤

XML 標籤對大小寫敏感

XML 必須正確地嵌套

XML 文檔必須有根元素

XML 的屬性值須加引號

 

C#操做XML

在C#中使用控制檯程序,用 XMLDocument進行xml操做,包括查詢,增長,修改,刪除和保存。

下面使用C#來解析一個xml文檔:

<skills>
  <skill>
    <id>2</id>
    <name lang="cn">天下無雙</name>
    <damage>123</damage>
   </skill>
  <skill>
    <id>3</id>
    <name lang="cn">永恆零度</name>
    <damage>90</damage>
  </skill>
  <skill>
    <id>4</id>
    <name lang="en">咫尺天涯</name>
    <damage>400</damage>
  </skill>
</skills>

定義一個Skill類:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _030_項目 {
    // 技能類
    class Skill {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Lang { get; set; }
        public int Damage { get; set; }

        public override string ToString()
        {
            return string.Format("Id: {0}, Name: {1}, Lang: {2}, Damage: {3}", Id, Name, Lang, Damage);
        }
    }
}

解析:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace _030_項目了 {
    class Program {
        static void Main(string[] args) {
            //建立技能信息集合,用來存儲全部的技能信息
            List<Skill> skillList = new List<Skill>();

            // XmlDocment專門用來解析xml文檔的
            XmlDocument xmlDoc = new XmlDocument();
            //選擇要加載解析的xml文檔的名字
            //xmlDoc.Load("skillinfo.txt");
            xmlDoc.LoadXml(  File.ReadAllText("skillinfo.txt") );//傳遞一個字符串(xml格式的字符串)

            //獲得根結點 (xmlnode用來表明一個結點)
            XmlNode rootNode = xmlDoc.FirstChild;//獲取第一個結點 
            
            //獲得根結點下面的子節點的集合
            XmlNodeList skillNodeList=  rootNode.ChildNodes;//獲取當前結點下面的全部子節點

            foreach (XmlNode skillNode in skillNodeList)
            {
                Skill skill = new Skill();
                XmlNodeList fieldNodeList = skillNode.ChildNodes;//獲取skill結點下面全部的結點 
                foreach (XmlNode fieldNode in fieldNodeList)
                {
                    if (fieldNode.Name == "id")//經過Name屬性 能夠獲取一個結點的名字
                    {
                        int id = Int32.Parse(fieldNode.InnerText);//獲取結點內部的文本
                        skill.Id = id;
                    }else if (fieldNode.Name == "name")
                    {
                        string name = fieldNode.InnerText;
                        skill.Name = name;
                        skill.Lang = fieldNode.Attributes[0].Value;
                    }
                    else
                    {
                        skill.Damage = Int32.Parse(fieldNode.InnerText);
                    }
                }
                skillList.Add(skill);
            }

            foreach (Skill skill in skillList)
            {
                Console.WriteLine(skill);
            }
            Console.ReadKey();
        }
    }
}

輸出結果:

相關文章
相關標籤/搜索