/*
XML(可扩展标记语言):用于传输和存储数据
XML文档:树结构;包含根元素
XML元素:从开始标签到结束标签的部分
XML语法规则:
1、所有XML元素都必须有结束标签
2、XML标签对字母大小写敏感
3、XML必须正确嵌套
4、必须有根元素
5、XML的属性值必须加引号
XML中的注释:
<!-- This is a comment -->
XML的命名规则:
名称可以含字母、数字以及其他字符
名称不能以数字或标点符号开始
名称不能以字符"Xml、xml、XML"开始
名称不能包含空格
可以使用任何名称(没有保留的字词)
*/
// Skill.xml
XML
<?xml version="1.0" encoding="utf-8" ?>
<skills>
<skill>
<id> 1 </id>
<name lang ="cn">大慈大悲手</name>
<damage>166</damage>
</skill>
<skill>
<id> 2 </id>
<name lang ="cn">佛落掌</name>
<damage>366</damage>
</skill>
<skill>
<id> 3 </id>
<name lang ="cn">如来</name>
<damage>666</damage>
</skill>
</skills>
// Skill.cs
cs
class Skill
{
public int ID { get; set; }
public string Name { get; set; }
public string Lang { get; set; }
public int Damage { get; set; }
}
// Program.cs
cs
static void Main(string[] args)
{
List<Skill> list = new List<Skill>(); //将Skill类的数据放入实例化的列表中
XmlDocument xmlDoc = new XmlDocument(); //实例化一个xml文档类型
//路径加载方法
xmlDoc.Load(@"F:\C#编程\XML uesr\Skills.xml");
//字符串加载方法
//xmlDoc.LoadXml(File.ReadAllText("Skills.xml"));
//获取1号子节点,注意:0是声明
XmlNode root0 = xmlDoc.ChildNodes[0];
XmlNode root = xmlDoc.ChildNodes[1];
Console.WriteLine(root0.Name); // xml
Console.WriteLine(root.Name); // skills
//获取root的所有子节点
XmlNodeList skillList = root.ChildNodes;
foreach(XmlNode skill in skillList)
{
// xml获取子节点和属性值方案一
/* Skill skillObj = new Skill();
XmlElement idEle = skill["id"];
skillObj.ID = Int32.Parse(idEle.InnerText);
XmlElement nameEle = skill["name"];
skillObj.Name = nameEle.InnerText;
XmlAttributeCollection attriCol = nameEle.Attributes;
XmlAttribute attri = attriCol["lang"];
skillObj.Lang = attri.Value;
XmlElement damageEle = skill["damage"];
skillObj.Damage = Int32.Parse(damageEle.InnerText);
list.Add(skillObj);*/
// xml获取子节点和属性值方案二
Skill skillObj = new Skill();
foreach (XmlNode node in skill.ChildNodes)
{
// Console.WriteLine(node.Name + ":" + node.InnerText);
/*
* id: 1
* name: 大慈大悲手
*damage:166
*id: 2
*name: 佛落掌
*damage:366
*id: 3
*name: 如来
*damage:666
*/
if (node.Name == "id")
{
// 将数字的字符串表示形式转换为它的等效 32 位有符号整数。
skillObj.ID = Int32.Parse(node.InnerText);
}
else if(node.Name == "name")
{
// 获取或设置节点及其所有子节点的串连值。
skillObj.Name = node.InnerText;
// 获取 System.Xml.XmlAttributeCollection 包含此节点的属性。
skillObj.Lang = node.Attributes[0].Value;
}
else
{
skillObj.Damage = Int32.Parse(node.InnerText);
}
}
// 将skillObj的值依次存入列表
list.Add(skillObj);
}
foreach (Skill s in list)
{
Console.WriteLine(s.ID + "," + s.Name + "," + s.Lang + "," + s.Damage);
/*1,大慈大悲手,cn,166
2,佛落掌,cn,366
3,如来,cn,666*/
}
}
// 结果