文档解析之XML文档读取

来源:互联网 发布:嵌入式无人机软件 编辑:程序博客网 时间:2024/06/04 21:56

XML操作

概念:XML指可扩展标记语言
XML被设计用来传输和存储数据,XML被设计用来结构化、存储以及传输信息
XML文档必须包含根元素,该元素是所有其他元素的父元素
XML文档中的元素形成一颗文档树,这棵树从根部开始,并扩展到树的最底端

XML语法规则

所有的XML元素都必须有关闭标签
<p>This is a paragaph<p>
XML标签对大小写敏感,标签<Letter>与标签<letter>
    <Message>这是错误的</message>
    <message>这是正确的</message>
XML必须正确的嵌套
    <b><i>This text is bold and italic</b></i>
    <b><i>This text is bold and italic</i></b>
XML文档必须有根元素
   <root>
   <child>
   <subchild>....<subchild>
   <child>
   <root>
XML的属性必须加引号
   <note date=08/08/2008>
   <to>George</to>
   <from>John</from>
XML元素必须遵循一下命名规则:
1、名称可以含字母、数字以及其他字符
2、名称不能以数字或者标点符号开始
3、名称不能以字符"xml"(或者XML、Xml)开始
4、名称不能包含空格

手写一个XML文档

利用VS添加一个文本文档,在文本文档上点右键选择打开方式,在弹出的对话框中选择XML文本编辑器
 
利用VS在文本文档中写入如下数据
  1. <skills>//开始节点
  2. <skill>
  3. <id>2</id>
  4. <name lang="cn">天下无双</name>
  5. <damage>100</damage>
  6. </skill>
  7. <skill>
  8. <id>3</id>
  9. <name lang="cn">小二黑</name>
  10. <damage>236</damage>
  11. </skill>
  12. <skill>
  13. <id>4</id>
  14. <name lang="cn">光头强</name>
  15. <damage>456</damage>
  16. </skill>
  17. </skills>//结束节点


XML文档解析

1、首先创建一个技能类Skill
  1. class Skill
  2. {
  3. public int ID { get; set; }
  4. public string Name { get; set; }
  5. public string Lang { get; set; }
  6. public int Damage { get; set; }
  7. public override string ToString()
  8. {
  9. return $"ID: {ID}, Name: {Name}, Lang: {Lang}, Damage: {Damage}";
  10. }
  11. }
2、在主函数中解析XML文本
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //创建技能信息集合,用来存储所有的技能信息
  6. List<Skill> skillList = new List<Skill>();
  7. XmlDocument xmlDoc = new XmlDocument();
  8. //xmlDoc.Load("TextFile1.txt");//选择要加载解析的XML文档
  9. xmlDoc.LoadXml(File.ReadAllText("TextFile1.txt"));//传递一个xml格式的字符串
  10. //得到根节点
  11. XmlNode rootNode = xmlDoc.FirstChild;//获取第一个节点
  12. //得到根节点下面的子节点的集合
  13. XmlNodeList skillNoteList = rootNode.ChildNodes;//获取获取当前节点下面的所有子节点
  14. //遍历所有节点
  15. foreach (XmlNode skillNote in skillNoteList)
  16. {
  17. Skill skill = new Skill();//创建一个技能类对象
  18. XmlNodeList filedNoteList = skillNote.ChildNodes;//获取Skill节点下面的所有节点
  19. foreach (XmlNode fieldNode in filedNoteList)
  20. {
  21. if (fieldNode.Name == "id")//通过Name获取一个节点的名字
  22. {
  23. int id = Int32.Parse(fieldNode.InnerText); //获取节点内部的文本
  24. skill.ID = id;//把字符串赋值给文本
  25. }else if (fieldNode.Name=="name")
  26. {
  27. string name = fieldNode.InnerText;//获取节点内部的文本
  28. skill.Name = name;
  29. skill.Lang = fieldNode.Attributes[0].Value;
  30. }else
  31. {
  32. skill.Damage=Int32.Parse(fieldNode.InnerText);
  33. }
  34. }
  35. skillList.Add(skill);//将技能信息加到集合中
  36. }
  37. foreach (Skill skill in skillList)//遍历输出所有技能信息
  38. {
  39. Console.WriteLine(skill);
  40. }
  41. Console.ReadKey();
  42. }
  43. }
本文源自SIKI的教程系列,感谢siki
0 0
原创粉丝点击