XML学习笔记--未完待续


XML文档创建流程图

创建、读取XML过程详解

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

  

    <语文成绩>59

    <数学成绩>54

    <外语成绩>93

  

  

    <语文成绩>86

    <数学成绩>91

    <外语成绩>94

  

  

    <语文成绩>92

    <数学成绩>92

    <外语成绩>62

  

  

    <语文成绩>91

    <数学成绩>85

    <外语成绩>61

  

  

    <语文成绩>87

    <数学成绩>71

    <外语成绩>71

  

  

    <语文成绩>71

    <数学成绩>79

    <外语成绩>81

  

  

    <语文成绩>59

    <数学成绩>77

    <外语成绩>51

  

  

    <语文成绩>65

    <数学成绩>86

    <外语成绩>78

  

  

    <语文成绩>57

    <数学成绩>61

    <外语成绩>57

  

  

    <语文成绩>72

    <数学成绩>88

    <外语成绩>85

  

创建XML文档流程详解:

1、创建XML文档类

XmlDocument doc = new XmlDocument();

2、通过doc创建文档元素

●通过doc创建文档声明

XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes");

●通过AppendChild方法添加文档声明

doc.AppendChild(declaration);

●创建根节点

XmlElement root = doc.CreateElement("students");

●添加根节点(XmlElement继承自XmlNode,里氏替换原则)

doc.AppendChild(root);

3、二级子节点(根节点为一级节点)

●创建二级子节点

XmlElement element1 = doc.CreateElement("student");

root.AppendChild(element1);

●添加二级子节点(继承自XmlNode的AppendChild方法)

root.AppendChild(element1);

●二级子节点属性设置SetAttribute方法

element1.SetAttribute("姓名", $"刘小强-{i}");

element1.SetAttribute("学号", (10000 + i).ToString());

4、三级子节点

●创建三级子节点

XmlElement element1_1 = doc.CreateElement("语文成绩");

●添加三级子节点

element1.AppendChild(element1_1);

●设置三级子节点的内容InnerText

element1_1.InnerText = random.Next(50, 100).ToString();

5、循环创建多个节点并保存XML文档

doc.Save("students.xml");

读取XML文档流程详解:

1、创建XML文档类

XmlDocument doc = new XmlDocument();

2、加载XML文档

doc.Load("students.xml");

3、获取根节点

XmlNode root = doc.SelectSingleNode("students");

4、获取二级子节点列表XmlNodeList

XmlNodeList list = root.ChildNodes;

5、循环遍历二级子节点列表XmlNodeList

●列表元素转型为XmlElement(为了使用XmlElement的GetAttribute方法)

XmlElement element = node as XmlElement;

●获取二级子节点属性

string name = element.GetAttribute("姓名");

string no = element.GetAttribute("学号");

6、获取三级子节点列表XmlNodeList

XmlNodeList childList = node.ChildNodes;

7、循环遍历三级子节点列表XmlNodeList

(如果不会使用GetAttribute方法,也可以直接用XmlNode类型,而不用转型)

XmlElement childElement = childNode as XmlElement;

8、获取三级子节点的InnerText

●(转型的)

string score = childElement.Name + ":" + childElement.InnerText;

●或者(不转型的)

string score = childNode.Name + ":" + childNode.InnerText;

创建XML文档代码

        /// 
        /// 创建XML文档
        /// 
        public void CreateXmlDocument(ListBox listBox)
        {
            listBox.Items.Clear();
            Random random = new Random();
            XmlDocument doc = new XmlDocument();
            XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
            doc.AppendChild(declaration);
            XmlElement root = doc.CreateElement("students");
            doc.AppendChild(root);
            for (int i = 0; i < 10; i++)
            {
                listBox.Items.Add($"添加:刘小强-{i}");
                XmlElement element1 = doc.CreateElement("student");
                root.AppendChild(element1);
                element1.SetAttribute("姓名", $"刘小强-{i}");
                element1.SetAttribute("学号", (10000 + i).ToString());
                XmlElement element1_1 = doc.CreateElement("语文成绩");
                element1.AppendChild(element1_1);
                element1_1.InnerText = random.Next(50, 100).ToString();
                XmlElement element1_2 = doc.CreateElement("数学成绩");
                element1.AppendChild(element1_2);
                element1_2.InnerText = random.Next(50, 100).ToString();
                XmlElement element1_3 = doc.CreateElement("外语成绩");
                element1.AppendChild(element1_3);
                element1_3.InnerText = random.Next(50, 100).ToString();

            }
            doc.Save("students.xml");
            listBox.Items.Add("----------");
            listBox.Items.Add("创建成功...");
        }

读取XML文档代码

        /// 
        /// 读取XML文档
        /// 
        public void ReadXmlDocument(ListBox listBox)
        {
            listBox.Items.Clear();
            if (!File.Exists("students.xml")) return;
            XmlDocument doc = new XmlDocument();
            doc.Load("students.xml");
            
            XmlNode root = doc.SelectSingleNode("students");
            XmlNodeList list = root.ChildNodes;
            foreach (XmlNode node in list)
            {
                XmlElement element = node as XmlElement;

                string name = element.GetAttribute("姓名");
                listBox.Items.Add("姓名:"+name);
                string no = element.GetAttribute("学号");
                listBox.Items.Add("学号:"+no);
                XmlNodeList childList = node.ChildNodes;
                foreach (var childNode in childList)
                {
                    XmlElement childElement = childNode as XmlElement;
                    string score = childElement.Name + ":" + childElement.InnerText;
                    listBox.Items.Add(score);
                }
                listBox.Items.Add("----------");
            }
            listBox.Items.Add("----------");
            listBox.Items.Add("读取成功...");
        }
    }

创建出的XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

  
    <语文成绩>59
    <数学成绩>54
    <外语成绩>93
  
  
    <语文成绩>86
    <数学成绩>91
    <外语成绩>94
  
  
    <语文成绩>92
    <数学成绩>92
    <外语成绩>62
  
  
    <语文成绩>91
    <数学成绩>85
    <外语成绩>61
  
  
    <语文成绩>87
    <数学成绩>71
    <外语成绩>71
  
  
    <语文成绩>71
    <数学成绩>79
    <外语成绩>81
  
  
    <语文成绩>59
    <数学成绩>77
    <外语成绩>51
  
  
    <语文成绩>65
    <数学成绩>86
    <外语成绩>78
  
  
    <语文成绩>57
    <数学成绩>61
    <外语成绩>57
  
  
    <语文成绩>72
    <数学成绩>88
    <外语成绩>85
  

运行结果