香蕉视频app

Keep on going never give up.

Let's Go

C# 操作XML文檔

C#Lonely2019-05-24 16:14:03153次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文檔創建成功!");
    }
}




暗錨,解決錨點偏移

文章評論

    嘿,來試試登錄吧!