Keep on going never give up.

Let's Go

C# 操作XML文档

C#Lonely2019-05-24 16:14:03119次0条

C#新建XML文档

代码示例:

public void WriteXML()
{
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = "xml文档|*.xml"; //筛选器
    if (sfd.ShowDialog() == DialogResult.OK)
    {
        XmlDocument doc = new XmlDocument();
        string path = sfd.FileName; //获取用户文件保存的路径
        //创建xml文档的声明
        doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", "yes"));
        //创建xml文档的根节点
        XmlElement rootNode = doc.CreateElement("Class");
        //将根节点添加到xml文档中
        doc.AppendChild(rootNode);

        for (int i = 1; i <= 3; i++)
        {
            //创建子节点
            XmlElement childNode = doc.CreateElement("Student");

            //创建学号元素
            XmlElement elementID = doc.CreateElement("ID");
            elementID.InnerText = i.ToString(); //赋值

            //创建姓名元素
            XmlElement elementName = doc.CreateElement("Name");
            elementName.InnerText = "张三"; //赋值

            //创建性别元素
            XmlElement elementSex = doc.CreateElement("Sex");
            elementSex.InnerText = "男"; //赋值

            //创建专业元素
            XmlElement elementMajor = doc.CreateElement("Major");
            elementMajor.InnerText = "软件工程"; //赋值

            //将elementID、elementName、elementSex、elementMajor、四个子元素添加到 childNode
            childNode.AppendChild(elementID);
            childNode.AppendChild(elementName);
            childNode.AppendChild(elementSex);                   
            childNode.AppendChild(elementMajor);

            //将子节点添加到根节点的末尾
            rootNode.AppendChild(childNode);
        }

        //保存
        doc.Save(path);
        MessageBox.Show("XML文档创建成功!");               
    }
}

XML文档内容如下:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Class>
  <Student>
    <ID>1</ID>
    <Name>张三</Name>
    <Sex>男</Sex>
    <Major>软件工程</Major>
  </Student>
  <Student>
    <ID>2</ID>
    <Name>张三</Name>
    <Sex>男</Sex>
    <Major>软件工程</Major>
  </Student>
  <Student>
    <ID>3</ID>
    <Name>张三</Name>
    <Sex>男</Sex>
    <Major>软件工程</Major>
  </Student>
</Class>


创建带属性的XML文档

代码示例:

public void WriteXML()
{
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = "xml文档|*.xml"; //筛选器
    if (sfd.ShowDialog() == DialogResult.OK)
    {
        XmlDocument doc = new XmlDocument();
        string path = sfd.FileName; //获取用户文件保存的路径
                                    //创建xml文档的声明
        doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", "yes"));
        //创建xml文档的根节点
        XmlElement rootNode = doc.CreateElement("Inventory"); //Inventory(清单)
        //将根节点添加到xml文档中
        doc.AppendChild(rootNode);

        //创建子节点
        XmlElement elementHandler = doc.CreateElement("Handler"); //Handler(处理者)
        elementHandler.InnerText = "沈婷婷"; //赋值
        rootNode.AppendChild(elementHandler);

        //创建子节点
        XmlElement elementDate = doc.CreateElement("Date"); //Date(日期)
        elementDate.InnerText = "2019-05-20"; //赋值         
        rootNode.AppendChild(elementDate);

        //创建子节点
        XmlElement elementItems = doc.CreateElement("Items");

        //创建子节点
        XmlElement elementGoods_1 = doc.CreateElement("Goods");
        //给节点添加属性
        elementGoods_1.SetAttribute("Name", "德芙巧克力");
        elementGoods_1.SetAttribute("Price", "¥18.00");
        elementGoods_1.SetAttribute("Count", "2");
        elementItems.AppendChild(elementGoods_1);

        //创建子节点
        XmlElement elementGoods_2 = doc.CreateElement("Goods");
        //给节点添加属性
        elementGoods_2.SetAttribute("Name", "益力多");
        elementGoods_2.SetAttribute("Price", "¥12.00");
        elementGoods_2.SetAttribute("Count", "5");
        elementItems.AppendChild(elementGoods_2);

        //创建子节点
        XmlElement elementGoods_3 = doc.CreateElement("Goods");
        //给节点添加属性
        elementGoods_3.SetAttribute("Name", "玫瑰鲜花");
        elementGoods_3.SetAttribute("Price", "¥520.00");
        elementGoods_3.SetAttribute("Count", "1");
        elementItems.AppendChild(elementGoods_3);

        rootNode.AppendChild(elementItems);

        //保存
        doc.Save(path);
        MessageBox.Show("XML文档创建成功!");
    }
}

XML文档内容如下:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Inventory>
  <Handler>沈婷婷</Handler>
  <Date>2019-05-20</Date>
  <Items>
    <Goods Name="德芙巧克力" Price="¥18.00" Count="2" />
    <Goods Name="益力多" Price="¥12.00" Count="5" />
    <Goods Name="玫瑰鲜花" Price="¥520.00" Count="1" />
  </Items>
</Inventory>


读取XML文档

代码示例:

public void ReadXML()
{
    OpenFileDialog ofd = new OpenFileDialog(); //用 OpenFileDialog 类来打开文档
    ofd.Filter = "XML文件(*.xml)|*.xml"; //筛选文件类型
    if (ofd.ShowDialog() == DialogResult.OK) //显示对话框 判断用户是否点击打开按钮
    {
        string path = ofd.FileName; //获取文件路径
        XmlDocument doc = new XmlDocument(); //定义XML文档对象
        doc.Load(path); //加载文件
        XmlNodeList nodeList = doc.SelectNodes("/Class/Student"); //选择匹配 XPath 表达式的节点列表                
        if (nodeList.Count > 0) //获取nodeList节点数,若节点数大于0,则说明有节点,反之则为无节点
        {
            //方法一:
            foreach (XmlNode node in nodeList)
            {
                foreach (XmlNode item in node.ChildNodes)
                {
                    MessageBox.Show(item.InnerText.ToString());
                }
            }
            //方法二:
            //for (int i = 0; i < nodeList.Count; i++)
            //{
            //    XmlNode node = nodeList.Item(i); //把第i组节点赋值给node
            //    for (int j = 0; j < node.ChildNodes.Count; j++)
            //    {
            //        MessageBox.Show(node.ChildNodes[j].InnerText.ToString()); //获取单节点node下子节点的值
            //    }
            //}
        }
        else
        {
            MessageBox.Show("没有在 '/Class/Student' 下获取到节点", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}


读取带属性的XML文档

代码示例:

public void ReadXML()
{
    OpenFileDialog ofd = new OpenFileDialog(); //用 OpenFileDialog 类来打开文档
    ofd.Filter = "XML文件(*.xml)|*.xml"; //筛选文件类型
    if (ofd.ShowDialog() == DialogResult.OK) //显示对话框 判断用户是否点击打开按钮
    {
        string path = ofd.FileName; //获取文件路径
        XmlDocument doc = new XmlDocument(); //定义XML文档对象
        doc.Load(path); //加载文件
        XmlNodeList nodeList = doc.SelectNodes("/Inventory/Items"); //选择匹配 XPath 表达式的节点列表                
        if (nodeList.Count > 0) //获取nodeList节点数,若节点数大于0,则说明有节点,反之则为无节点
        {
            //方法一:
            foreach (XmlNode node in nodeList)
            {
                foreach (XmlNode item in node.ChildNodes)
                {
                    MessageBox.Show(item.Attributes["Name"].Value + " \t " + item.Attributes["Price"].Value + " \t " + item.Attributes["Count"].Value);
                }
            }
            //方法二:
            //for (int i = 0; i < nodeList.Count; i++)
            //{
            //    XmlNode node = nodeList.Item(i); //把第i组节点赋值给node
            //    for (int j = 0; j < node.ChildNodes.Count; j++)
            //    {
            //        MessageBox.Show(node.ChildNodes[j].Attributes["Name"].Value + " \t " + node.ChildNodes[j].Attributes["Price"].Value + " \t " + node.ChildNodes[j].Attributes["Count"].Value);
            //    }
            //}
        }
        else
        {
            MessageBox.Show("没有在 '/Inventory/Items' 下获取到节点", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}


编辑XML文档

代码示例:

public void EditXML()
{
    OpenFileDialog ofd = new OpenFileDialog(); //用 OpenFileDialog 类来打开文档
    ofd.Filter = "XML文件(*.xml)|*.xml"; //筛选文件类型
    if (ofd.ShowDialog() == DialogResult.OK) //显示对话框 判断用户是否点击打开按钮
    {
        string path = ofd.FileName; //获取文件路径
        XmlDocument doc = new XmlDocument(); //定义XML文档对象
        doc.Load(path); //加载文件
        XmlNodeList nodeList = doc.SelectNodes("/Class/Student"); //选择匹配 XPath 表达式的节点列表                
        if (nodeList.Count > 0) //获取nodeList节点数,若节点数大于0,则说明有节点,反之则为无节点
        {
            for (int i = 0; i < nodeList.Count; i++)
            {
                XmlNode node = nodeList.Item(i); //把第i组节点赋值给node
                for (int j = 0; j < node.ChildNodes.Count; j++)
                {
                    node.ChildNodes[j].InnerText += i.ToString(); //重新赋值
                }
            }
            doc.Save(path);
            MessageBox.Show("XML文档编辑成功!");
        }
        else
        {
            MessageBox.Show("没有在 '/Class/Student' 下获取到节点", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }                                
}


删除XML节点

代码示例:

public void DelXML()
{
    OpenFileDialog ofd = new OpenFileDialog(); //用 OpenFileDialog 类来打开文档
    ofd.Filter = "XML文件(*.xml)|*.xml"; //筛选文件类型
    if (ofd.ShowDialog() == DialogResult.OK) //显示对话框 判断用户是否点击打开按钮
    {
        string path = ofd.FileName; //获取文件路径
        XmlDocument doc = new XmlDocument(); //定义XML文档对象
        doc.Load(path); //加载文件
        XmlNodeList nodeList = doc.SelectNodes("/Class/Student"); //选择匹配 XPath 表达式的节点列表        
        if (nodeList.Count > 0) //获取nodeList节点数,若节点数大于0,则说明有节点,反之则为无节点
        {
            for (int i = 0; i < nodeList.Count; i++)
            {
                XmlNode node = nodeList.Item(i); //把第i组节点赋值给node
                node.RemoveAll(); //移除当前所有子节点和属性
                //RemoveChild()移除指定子节点
                //ReplaceChild()替换子节点
            }
            doc.Save(path);
            MessageBox.Show("删除Student下的子节点成功!");
        }
        else
        {
            MessageBox.Show("没有在 '/Class/Student' 下获取到节点", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }                                
}


将数据库表中的数据导出到XML文档

代码示例:

/// <summary>
/// 将数据库表中的数据导出到XML文档
/// </summary>
/// <param name="dt">数据</param>
public void ExportXML(DataTable dt)
{
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = "xml文档|*.xml";
    if (sfd.ShowDialog() == DialogResult.OK)
    {
        XmlDocument doc = new XmlDocument();
        string path = sfd.FileName; //获取文件保存的路径
        //创建xml文档的声明
        doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", "yes"));
        //创建xml文档的根节点
        XmlElement rootNode = doc.CreateElement("Class");
        //将根节点添加到xml文档中
        doc.AppendChild(rootNode);

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            //创建子节点
            XmlElement childNode = doc.CreateElement("Target");
            XmlElement element;
            for (int j = 0; j < dt.Columns.Count; j++) //循环表的列
            {
                element = doc.CreateElement(dt.Columns[j].ToString().Trim());
                //获取表的该列数据
                element.InnerText = dt.Rows[i][j].ToString().Trim();
                childNode.AppendChild(element);
            }
            rootNode.AppendChild(childNode);
        }
        doc.Save(path);
        MessageBox.Show("XML文档创建成功!");
    }
}




暗锚,解决锚点偏移

文章评论

    嘿,来试试登录吧!