XmlDocument

Posted 森林长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XmlDocument相关的知识,希望对你有一定的参考价值。

XmlDocument增删改查。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace _02XmlDocumentReview
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //xml文件储存路径
        private static string xmlFilePath = Application.StartupPath + "\\ListComputer.xml";
        //创建
        private void button1_Click(object sender, EventArgs e)
        {
            GenerateXml(xmlFilePath);
            MessageBox.Show("执行成功!");
        }

        private void GenerateXml(string xmlFilePath)
        {
            XmlDocument xmlDoc = new XmlDocument();
            XmlDeclaration xmlDec = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
            xmlDoc.AppendChild(xmlDec);

            XmlElement root = xmlDoc.CreateElement("computers");
            xmlDoc.AppendChild(root);

            XmlElement firstElement1 = xmlDoc.CreateElement("computer");
            firstElement1.SetAttribute("ID", "11111111");
            firstElement1.SetAttribute("Description", "Made In China");
            root.AppendChild(firstElement1);

            XmlElement secondElement11 = xmlDoc.CreateElement("Name");
            secondElement11.InnerText = "Lenovo";
            firstElement1.AppendChild(secondElement11);

            XmlElement secondElement12 = xmlDoc.CreateElement("Price");
            secondElement12.InnerText = "5000";
            firstElement1.AppendChild(secondElement12);

            XmlElement firstElement2 = xmlDoc.CreateElement("computer");
            firstElement2.SetAttribute("ID", "22222222");
            firstElement2.SetAttribute("Description", "Made In USA");
            root.AppendChild(firstElement2);

            XmlElement secondElement21 = xmlDoc.CreateElement("Name");
            secondElement21.InnerText = "IBM";
            firstElement2.AppendChild(secondElement21);

            XmlElement secondElement22 = xmlDoc.CreateElement("Price");
            secondElement22.InnerText = "10000";
            firstElement2.AppendChild(secondElement22);

            xmlDoc.Save(xmlFilePath);

        }
        //遍历
        private void button2_Click(object sender, EventArgs e)
        {
            GetXmlFileInformation(xmlFilePath);
            MessageBox.Show("执行成功!");
        }

        private void GetXmlFileInformation(string xmlFilePath)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlFilePath);
            //方法1:
            XmlNode root = xmlDoc.DocumentElement;
            //方法2:
            XmlNode rootElement = xmlDoc.SelectSingleNode("computers");
            foreach (XmlNode node in rootElement.ChildNodes)//root.ChildNodes)
            {
                string name = string.Empty;
                string value = string.Empty;
                //节点属性
                foreach (XmlAttribute attri in node.Attributes)
                {
                    name = attri.Name;
                    value = attri.Value;
                    MessageBox.Show(string.Format("{0}={1}", name, value));
                }

                if (node.HasChildNodes)
                {
                    for (int i = 0; i < node.ChildNodes.Count; i++)
                    {
                        name = node.ChildNodes[i].Name;
                        //value = node.ChildNodes[i].Value; //错
                        value = node.ChildNodes[i].InnerText;
                        MessageBox.Show(string.Format("{0}={1}", name, value));
                    }
                }
            }
        }
        //修改
        private void button3_Click(object sender, EventArgs e)
        {
            UpdateXmlFileInformation(xmlFilePath);
            MessageBox.Show("执行成功!");
        }

        private void UpdateXmlFileInformation(string xmlFilePath)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlFilePath);
            XmlNode root = xmlDoc.DocumentElement;

            foreach (XmlNode node in root.ChildNodes)
            {
                if (node.Attributes["Description"].Value.Equals("Made In USA"))
                {
                    node.Attributes["Description"].Value = "Made In HK";
                }
                if (node.HasChildNodes && node.Attributes["ID"].Value == "22222222")
                {
                    node.ChildNodes[1].InnerText = "8000";
                }
            }
            xmlDoc.Save(xmlFilePath);
        }
        //新增
        private void button4_Click(object sender, EventArgs e)
        {
            AddXmlFileInformation(xmlFilePath);
            MessageBox.Show("执行成功!");
        }

        private void AddXmlFileInformation(string xmlFilePath)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlFilePath);
            XmlNode root = xmlDoc.DocumentElement;

            foreach (XmlNode node in root.ChildNodes)
            {
                XmlElement newElement = xmlDoc.CreateElement("Color");
                newElement.SetAttribute("IsMixed", "Yes");
                newElement.InnerText = "Black";
                //xmlDoc.AppendChild(newElement);//错误
                //root.AppendChild(newElement);//错误
                //节点的级别要清晰
                node.AppendChild(newElement);
            }
            xmlDoc.Save(xmlFilePath);
        }
        //删除
        private void button5_Click(object sender, EventArgs e)
        {
            DeleteXmlFileInformation(xmlFilePath);
            MessageBox.Show("执行成功!");
        }

        private void DeleteXmlFileInformation(string xmlFilePath)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlFilePath);
            XmlNode root = xmlDoc.DocumentElement;

            foreach (XmlNode node in root.ChildNodes)
            {
                XmlNode lastNode = node.LastChild;
                lastNode.RemoveAll();
                node.RemoveChild(lastNode);
            }
            xmlDoc.Save(xmlFilePath);
        }
    }
}

 

以上是关于XmlDocument的主要内容,如果未能解决你的问题,请参考以下文章

为啥在执行我的代码 (XmlDocument.Load) 之前设置断点会阻止异常?

从 XmlDocument 到 XmlReader .Net

如何防止 XXE 攻击(.NET 中的 XmlDocument)

从 XmlDocument 中删除节点

[C#]在 XMLDocument 中添加 XSL 引用

XmlDocument.Load 多个根元素