.Net操作XML文件常用方法

185 阅读3分钟

1.创建.net 操作xml 去创建 xml的一个实例,导入指定的xml文件,和获取xml文件中节点的名称,在获取节点下的所有子节点,也需求去判断此节点下是否有子节点,并且获取同名同级节点集合

获取同名同级 节点集合,生成新的节点,将节点加到指定的节点下,作为其子节点,多说无益 上代码

//所需要添加的命名空间
      using System.Xml;
    //初始化一个xml实例
    XmlDocument xml=new XmlDocument();
    //导入指定xml文件
    xml.Load(“xml文件路径path”);
    //指定一个节点
    XmlNode root=xml.SelectSingleNode("节点名称");
    //获取节点下所有直接子节点
    XmlNodeList childlist=root.ChildNodes;
    //判断该节点下是否有子节点
    root.HasChildNodes;
    //获取同名同级节点集合
    XmlNodeList nodelist=xml.SelectNodes("节点名称");
    //生成一个新节点
    XmlElement node=xml.CreateElement("节点名称");
    //将节点加到指定节点下,作为其子节点
    root.AppendChild(node);
    //将节点加到指定节点下某个子节点前
    root.InsertBefore(node,root.ChildeNodes[i]);
    //为指定节点的新建属性并赋值
    node.SetAttribute("id","11111");
    //为指定节点添加子节点
    root.AppendChild(node);
    //获取指定节点的指定属性值
    string id=node.Attributes["id"].Value;
    //获取指定节点中的文本
    string content=node.InnerText;
    //保存XML文件
    xml.Save(“xml文件存储的路径path”);

2.对XML文件进行添加信息

 private static void AddXmlInformation(string xmlFilePath, IpAddressModel IpMod)
    {
        try
        {
            XmlDocument myXmlDoc = new XmlDocument();
            //获取XML文件
            myXmlDoc.Load(xmlFilePath);

            //获取到指定的节点名称(根节点)
            XmlNode root = myXmlDoc.SelectSingleNode("Ipaddress");

            //为此节点添加新行(子节点)
            XmlElement node = myXmlDoc.CreateElement("IpAddressInfor");

            //给新增的节点添加属性
            node.SetAttribute("IP", IpMod.IP);
            node.SetAttribute("Port", IpMod.Port);
            node.SetAttribute("RemoteChannel", IpMod.RemoteChannel);
            node.SetAttribute("UserName", IpMod.UserName);
            node.SetAttribute("UserPassd", IpMod.PassWord);
            node.SetAttribute("Address", IpMod.Address);

            //将节点添加到根节点下面
            root.AppendChild(node);


            //保存更改
            myXmlDoc.Save(xmlFilePath);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }

3.读取XML信息

private List<IpAddressModel> ReadXmlData()
{
    List<IpAddressModel> IpAddressModelList=new List<IpAddressModel>();
   
    XmlDocument doc = new XmlDocument();

    doc.Load(Server.MapPath("data/VideoIP.xml"));  //从指定位置加载XML文件
    XmlElement xmlroot = doc.DocumentElement;      //获取更节点
    foreach (XmlNode node in xmlroot)              //循环获取每个节点的数据
    {
        IpAddressModel IpInfor = new IpAddressModel();
        IpInfor.IP = node.Attributes["IP"].Value;
        IpInfor.Address = node.Attributes["Address"].Value;
        IpInfor.PassWord = node.Attributes["UserPassd"].Value;
        IpInfor.UserName = node.Attributes["UserName"].Value;
        IpInfor.Port = node.Attributes["Port"].Value;
        IpInfor.RemoteChannel = node.Attributes["RemoteChannel"].Value;
        IpAddressModelList.Add(IpInfor);
    }

    return IpAddressModelList;

}
  1. XML文件修改
#region EditXml:修改
    /// <summary>
    /// EditXml:修改
    /// </summary>
    /// <param name="xmlPath">XML的文件路径</param>
    /// <param name="ip">IP地址</param>
    /// <param name="IpModel">监控信息Model</param>

    private void EditXml(string xmlPath,string ip,string address, IpAddressModel IpModel)
    {
        try
        {
            XmlDocument xml = new XmlDocument();
            xml.Load(xmlPath);
            //查找根节点
            XmlNode node = xml.SelectSingleNode("Ipaddress");

            //获得其子节点
            XmlNodeList nodelist = node.ChildNodes;

            foreach (XmlNode xmlnodechild in nodelist)
            {
                XmlElement xe = (XmlElement)xmlnodechild;//将节点转换一下类型
                //根据Ip和地址来判断需要修改哪个监控
                if (xe.GetAttribute("IP") == ip && xe.GetAttribute("Address")==address)
                {
                    xe.SetAttribute("IP", IpModel.IP);
                    xe.SetAttribute("Address",IpModel.Address);
                    xe.SetAttribute("Port", IpModel.Port);
                }

            }
            //保存更改
            xml.Save(xmlPath);

        }
        catch (Exception ee)
        {
            Response.Write("<script>alert('"+ee.Message.ToString()+"')</script>");
            throw;
        }

    }

    #endregion

5.XML文件删除

  ///<summary>
    /// DeleteXml:删除
    /// </summary>
    /// <param name="xmlPath">XML文件路径</param>
    /// <param name="EquipmentId">设备ID</param>
    /// <returns></returns>
    private string DeleteXml(string xmlPath, string EquipmentId)
    {
        string result = "";

        try
        {
            XmlDocument xml = new XmlDocument();
            xml.Load(xmlPath);
            //查找根节点
            XmlNode node = xml.SelectSingleNode("Solider");

            //获得其子节点
            XmlNodeList nodelist = node.ChildNodes;

            foreach (XmlNode xmlnodechild in nodelist)
            {
                XmlElement xe = (XmlElement)xmlnodechild;//将节点转换一下类型
                //根据Ip和地址来判断需要修改哪个监控
                if (xe.GetAttribute("EquipmentId") == EquipmentId)
                {
                    node.RemoveChild(xe);
                }

            }
            //保存更改
            xml.Save(xmlPath);
            result = "1";
        }
        catch (Exception ee)
        {
            result = ee.Message;
            throw;
        }

        return result;


    }

6.XML文件没有value值的情况 用HashTable读取 例子

<?xml version="1.0" encoding="utf-8" ?>  
<Organizations>  
  <Organization>  
    <ID>1111</ID>  
    <DomainName>aa</DomainName>  
  </Organization>  
  <Organization>  
    <ID>2222</ID>  
    <DomainName>bb</DomainName>  
  </Organization>  
</Organizations>

读取方法

Hashtable ht = new Hashtable();  
            string orgCodePath = Server.MapPath(ConfigurationSettings.AppSettings["orgCodePath"]);  
            //string orgCodePath = Server.MapPath("../../template/home/orgCode.xml");  
            XmlDocument xmldoc = new XmlDocument();  
            xmldoc.Load(orgCodePath);  
  
            //获取节点列表  
            XmlNodeList topM = xmldoc.SelectNodes("//Organization");  
            foreach (XmlElement element in topM)  
            {  
                string id = element.GetElementsByTagName("ID")[0].InnerText;  
                string domainName = element.GetElementsByTagName("DomainName")[0].InnerText;  
                ht.Add(id, domainName);  
            }