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();
}
}
}
结果