学习C#高级编程之XML

XML 指可扩展标记语言

XML 被设计用来传输和存储数据。XML 被设计用来结构化、存储以及传输信息。

-----------------------------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 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。

第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 (ISO-8859-1 = Latin-1/西欧字符集)。

下一行描述文档的根元素(像在说:“本文档是一个便签”):<note>

接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body):

<to>George</to>

<from>John</from>

<heading>Reminder</heading>

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

最后一行定义根元素的结尾:

</note>

XML 文档必须包含根元素。该元素是所有其他元素的父元素。

XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。

所有元素均可拥有子元素:

<root>

  <child>

    <subchild>.....</subchild>

  </child>

  <child>

    <subchild>.....</subchild>

  </child>

</root>

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文档

<skills>
  <skill>
    <id>2</id>
    <name lang="cn">致命打击</name>
    <danage>123</danage>
  </skill>
  <skill>
    <id>3</id>
    <name lang="cn">瓦尔基里俯冲</name>
    <damage>90</damage>
  </skill>
  <skill>
    <id>4</id>
    <name lang="en">Justice Trial</name>
    <damage>200</damage>
  </skill>
</skills>

xml文档解析(读出xml文档类容)

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

namespace _035_xml操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建技能信息集合,用来存储所有的技能信息
            List<Skill> skillList = new List<Skill>();


            //XmlDocument专门用来解析xml文档
            XmlDocument xmlDoc = new XmlDocument();

            //选择要加载解析的xml文档的名字
            //xmlDoc.Load("skillinfo.txt");

            xmlDoc.LoadXml(File.ReadAllText("skillinfo.txt"));//传递一个字符串(xml格式的字符串)

            //得到根结点
            //XmlNode代表一个结点
            XmlNode rootNode = xmlDoc.FirstChild;//获取第一个结点  即<skills>
            //获取当前结点下面所有的子结点 即所有的<skill>
            XmlNodeList skillNodeList = rootNode.ChildNodes;
            foreach(XmlNode skillNode in skillNodeList)
            {
                Skill skill = new Skill();
                //获取skill结点下面所有的结点
                XmlNodeList fieldNodeList = skillNode.ChildNodes;  
                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();
        }
       
    }
}

文档解析的第二种方法

xml技能信息.txt


<SkillInfo>
    <SkillList>
        <Skill
            SkillID="20002"  
            SkillEngName="Smash" 
            TriggerType="1" 
            ImageFile="data/gfx/image/gui_icon_skill_000.dds" 
            AvailableRace="7" 
        >
			<Name>重击</Name>
		</Skill>
        <Skill
            SkillID="20003" 
            SkillEngName="Hide"
            TriggerType="2" 
            ImageFile="data/gfx/image/gui_icon_skill_001.dds"
            AvailableRace="1" 
        >
			<Name>隐身</Name>
		</Skill>
        <Skill
            SkillID="20004" 
            SkillEngName="Ikari" 
            TriggerType="3" 
            ImageFile="data/gfx/image/gui_icon_skill_002.dds" 
            AvailableRace="1" 
        >
			<Name>怒之翼</Name>
		</Skill>
        <Skill
            SkillID="20005" 
            SkillEngName="Revenge" 
            TriggerType="5" 
            ImageFile="data/gfx/image/gui_icon_skill_003.dds" 
            AvailableRace="2" 
        >
			<Name>光之复仇</Name>
		</Skill>
    </SkillList>
</SkillInfo>

Skill.cs

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

namespace _036_xml文档解析_技能信息
{
    class Skill
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string EngName { get; set;}
        public int TriggerType { get; set; }
        public string ImageFile { get; set; }
        public int AvailableRace { get; set; }

        public override string ToString()
        {
            return string.Format("Id:{0},Name:{1},EngName:{2},TriggerType:{3},ImageFile:{4},AvailableRace:{5}", Id, Name, EngName, TriggerType, ImageFile, AvailableRace);
        }
    }

Program.cs

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

namespace _036_xml文档解析_技能信息
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Skill> skillList = new List<Skill>();

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("xml技能信息.txt");
            //xmlDoc.LoadXml(File.ReadAllText("xml技能信息.txt"));

            //XmlNode skillInfoNode = xmlDoc.FirstChild;
            //XmlNode skillListNode = xmlDoc.FirstChild;
            XmlNode skillListNode = xmlDoc.FirstChild.FirstChild;

            XmlNodeList skillNodeList = skillListNode.ChildNodes;
            foreach (XmlNode skillNode in skillNodeList)
            {
                Skill skill = new Skill();
                XmlElement ele = skillNode["Name"];
                skill.Name = ele.InnerText;
                XmlAttributeCollection col = skillNode.Attributes;
                //获取到该结点属性的集合
                skill.Id = Int32.Parse(col["SkillID"].Value);
                skill.EngName = col["SkillEngName"].Value;
                skill.TriggerType = Int32.Parse(col["TriggerType"].Value);
                skill.ImageFile = col["ImageFile"].Value;
                skill.AvailableRace = Int32.Parse(col["AvailableRace"].Value);
                skillList.Add(skill);
            }
            foreach (Skill s in skillList)
            {
                Console.WriteLine(s);
            }
            Console.ReadKey();
        }
    }
}

结果

Json操作

JSON 是存储和交换文本信息的语法。类似 XML。

JSON 比 XML 更小、更快,更易解析。JSON跟XML一样是一种是数据格式。

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。

{

"employees": [

{ "firstName":"Bill" , "lastName":"Gates" },

{ "firstName":"George" , "lastName":"Bush" },

{ "firstName":"Thomas" , "lastName":"Carter" }

]

}

Json的解析:需要引用LitJson.dll

json技能信息.txt

[
{"id":2,"name":"天下无双","damage":123},
{"id":3,"name":"天下无贼","damage":21},
{"id":4,"name":"正义打击","damage":900}
]

主角信息.txt

{
	"Name":"siki",
	"Level":99,
	"Age":18,
	"SkillList":[
		{"id":2,"name":"天下无双","damage":123},
		{"id":3,"name":"天下无贼","damage":21},
		{"id":4,"name":"正义打击","damage":900}
		]
}

skill.cs

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

namespace _037_json操作
{
    class Skill
    {
        public int id;
        public int damage;
        public string name;
        public override string ToString()
        {
            return string.Format("Id:{0},Damage:{1},Name:{2}", id, damage, name);
        }
    }
}

Player.cs

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

namespace _037_json操作
{
    class Player
    {
        public string Name { get; set; }
        public int Level { get; set; }
        public int Age { get; set; }
        public List<Skill> SkillList { get; set; }

        public override string ToString()
        {
            return string.Format("Name:{0},Level:{1},Age:{2},SkillList:{3}",Name,Level,Age,SkillList);
        }

    }
}

Program.cs

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

namespace _037_json操作
{
    class Program
    {
        static void Main(string[] args)
        {

            //List<Skill> skillList = new List<Skill>();

            //使用litjson进行解析json文本
            //我们使用jsonMapper去解析json文本
            //jsondata代表一个数组或一个对象
            //在这里jsonDat代表数组
            //JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json技能信息.txt"));
            //foreach(JsonData temp in jsonData)//在这里temp代表一个对象
            //{
            //    Skill skill = new Skill();
            //    JsonData idValue = temp["id"];//通过字符串索引器可以取得键值所对应的键值
            //    JsonData nameValue = temp["name"];
            //    JsonData damageValue = temp["damage"];
            //    skill.id = Int32.Parse(idValue.ToString());
            //    skill.damage = Int32.Parse(damageValue.ToString());
            //    skill.name = nameValue.ToString();
            //    skillList.Add(skill);
            //    //Console.WriteLine(id + ":" + nameValue.ToString() + ":" + damageValue);  
            //}

            //foreach(Skill s in skillList)
            //{
            //    Console.WriteLine(s);
            //}


            ////解析时,类里的属性值要与json文件里一致
            //Skill[] skillArray = JsonMapper.ToObject<Skill[]>(File.ReadAllText("json技能信息.txt"));
            //foreach(var temp in skillArray)
            //{
            //    Console.WriteLine(temp);
            //}

            //List<Skill> skillList = JsonMapper.ToObject<List<Skill>>(File.ReadAllText("json技能信息.txt"));
            //foreach (Skill s in skillList)
            //{
            //    Console.WriteLine(s);
            //}

            //Player p = JsonMapper.ToObject<Player>(File.ReadAllText("主角信息.txt"));
            //Console.WriteLine(p);
            //foreach(var temp in p.SkillList)
            //{
            //    Console.WriteLine(temp);
            //}

            Player p = new Player();
            p.Name = "路明非";
            p.Level = 100;
            p.Age = 16;
            string json = JsonMapper.ToJson(p);
            Console.WriteLine(json);
            Console.ReadKey();
        }
    }
}

Excel操作

1,使用OLEDB操作Excel

  关于OLEDB介绍参考

  http://www.cnblogs.com/moss_tan_jun/archive/2012/07/28/2612889.html

2,连接字符串

  "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";

  "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";

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

namespace _038_Excel操作
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileNmae = "装备信息.xls";
            string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileNmae + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
            //创建连接到数据源的对象
            OleDbConnection connection = new OleDbConnection(connectionString);
            //打开连接
            connection.Open();
            string sql = "select * from [Sheet1$]";
            OleDbDataAdapter adapter = new OleDbDataAdapter(sql,connection);

            DataSet dataSet = new DataSet();//用来存放数据 datatable
            adapter.Fill(dataSet);//把查询的结果(datatable)放到dataset里面
            connection.Close();

            //取得数据
            DataTableCollection tableCollection = dataSet.Tables;//获取当前集合中所有的表格
            DataTable table = tableCollection[0];//因为我们只在dataset中放置了一张表格
            //所以这里取得索引为0的表格就是我们刚刚查询到的表格

            //取得表格中的数据
            //取得table中所有的行
            DataRowCollection rowCollection = table.Rows;//返回一个行的集合
            foreach(DataRow row in rowCollection)
            {
                //取得row中前8列的数据 索引为0-7
                for(int i = 0; i < 8; i++)
                {
                    Console.Write(row[i] + "");
                }
                Console.WriteLine();
            }
            Console.ReadKey();
        }
    }
}

结果

猜你喜欢

转载自blog.csdn.net/kouzhuanjing1849/article/details/81171257