XML使用与总结

时间:2023-03-09 08:39:43
XML使用与总结
xml是一种比较方便的数据储存方式,它适用于小数据的存储。最常见的适用地方莫过于各种web.config与app.config了。
一、创建一个简单的xml路径
 public static string xmlPath = AppDomain.CurrentDomain.BaseDirectory + "test.xml";
二、创建一个xml文件,并添加一级数据【只有一级数据】
        public void Set()
{
try
{
XmlDocument xmldoc = new XmlDocument();
if (!File.Exists(xmlPath))
{
//不关闭会有错误提示,被另一个线程占用
File.Create(xmlPath).Close(); //创建root节点
XmlElement root = xmldoc.CreateElement("Root");
xmldoc.AppendChild(root);
xmldoc.Save(xmlPath);
} //加载xml文件
xmldoc.Load(xmlPath);
var rootElement = xmldoc.DocumentElement; //创建子节点
var childnode = xmldoc.CreateElement("Phone");
//设置属性
childnode.SetAttribute("Name", "IPhone 6s");
childnode.SetAttribute("BackGround", "银白色 玫瑰色 土豪金");
//设置内容
childnode.InnerText = "6s 已经是淘汰产品了"; //追加到Root节点
rootElement.AppendChild(childnode);
//保存XML
xmldoc.Save(xmlPath); }
catch (Exception e)
{
Console.WriteLine(e);
}

执行结果,执行了3次,每次添加一些属性

<Root>
<Phone Name="IPhone 6s" />
<Phone Name="IPhone 6s">6s 已经是淘汰产品了</Phone>
<Phone Name="IPhone 6s" BackGround="银白色 玫瑰色 土豪金">6s 已经是淘汰产品了</Phone>
</Root>

三、创建有2级数据的xml文件,一级节点的名字最好保持一致,否则查询时有困难。

        public void Set()
{
try
{
XmlDocument xmldoc = new XmlDocument();
if (!File.Exists(xmlPath))
{
//不关闭会有错误提示,被另一个线程占用
File.Create(xmlPath).Close(); //创建root节点
XmlElement root = xmldoc.CreateElement("Root");
xmldoc.AppendChild(root);
xmldoc.Save(xmlPath);
} //加载xml文件
xmldoc.Load(xmlPath);
var rootElement = xmldoc.DocumentElement; //创建一级节点
var childnode = xmldoc.CreateElement("HuaWeiPhone");
childnode.SetAttribute("Name", "华为手机"); //创建二级节点
var hwbg = xmldoc.CreateElement("BackGround");
hwbg.SetAttribute("Description", "颜色");
hwbg.InnerText = "白色 黑色 玫瑰色 金色";
childnode.AppendChild(hwbg); //创建二级节点
var hwprice = xmldoc.CreateElement("Price");
hwprice.SetAttribute("Description", "价格");
hwprice.InnerText = "";
childnode.AppendChild(hwprice);
//追加到Root节点
rootElement.AppendChild(childnode); //创建一级节点
var childnode2 = xmldoc.CreateElement("XiaoMiPhone");
childnode2.SetAttribute("Name", "小米手机");
//创建二级节点
var hwbg2 = xmldoc.CreateElement("BackGround");
hwbg2.SetAttribute("Description", "颜色");
hwbg2.InnerText = "白色 黑色 ";
childnode2.AppendChild(hwbg2); //创建二级节点
var hwprice2 = xmldoc.CreateElement("Price");
hwprice2.SetAttribute("Description", "价格");
hwprice2.InnerText = "";
childnode2.AppendChild(hwprice2); //追加到Root节点
rootElement.AppendChild(childnode2);
//保存XML
xmldoc.Save(xmlPath); }
catch (Exception e)
{
Console.WriteLine(e);
}
}

xml文件为:

<Root>
<HuaWeiPhone Name="华为手机">
<BackGround Description="颜色">白色 黑色 玫瑰色 金色</BackGround>
<Price Description="价格"></Price>
</HuaWeiPhone>
<XiaoMiPhone Name="小米手机">
<BackGround Description="颜色">白色 黑色 </BackGround>
<Price Description="价格"></Price>
</XiaoMiPhone>
</Root>

四、清理全部的xml数据

        public void Delete()
{
try
{
if (!File.Exists(xmlPath)) return;
var xmldoc = new XmlDocument();
xmldoc.Load(xmlPath);
XmlNodeList xn = xmldoc.GetElementsByTagName("Root");
if(xn?.Count<=)return; //加载root节点
var rootElement = xmldoc.DocumentElement;
rootElement.RemoveAll();
xmldoc.AppendChild(rootElement);
xmldoc.Save(xmlPath); }
catch (Exception e)
{
}
}

五、根据节点名字,清理某一条数据

        public void DeleteByName(string name = "HuaWeiPhone")
{
try
{
if (!File.Exists(xmlPath)) return; XElement root = XElement.Load(xmlPath);
var element = root.Element(name);
element.Remove();
root.Save(xmlPath); }
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}

六、获取数据,根据某一个节点查询

                XmlDocument xmldoc = new XmlDocument();
//加载xml文件
xmldoc.Load(xmlPath); //方法一、根据节点名字获取节点信息
XmlNode xmlNode = xmldoc.SelectSingleNode("Root/XiaoMiPhone");//XiaoMiPhone一级节点名字
//该节点的属性
var name = xmlNode.Attributes["Name"].Value;
XmlNodeList childNodes = xmlNode.ChildNodes;
foreach (XmlNode item in childNodes)
{
//节点属性
var bgdescription = item.Attributes["Description"].Value;
//节点内容
var desTxt = item.InnerText;
//节点名字
var nodeName = item.Name;
}

七、遍历数据,xml数据如下

<Root>
<Phone Name="Oppo手机">
<BackGround Description="颜色">白色 黑色 玫瑰色 金色</BackGround>
<Price Description="价格"></Price>
</Phone>
<Phone Name="Vivo手机">
<BackGround Description="颜色">白色 黑色 </BackGround>
<Price Description="价格"></Price>
</Phone>
<Phone Name="小米手机">
<BackGround Description="颜色">白色 黑色 </BackGround>
<Price Description="价格"></Price>
</Phone>
<Phone Name="锤子手机">
<BackGround Description="颜色">银色 黑色 酒红 金色 </BackGround>
<Price Description="价格"></Price>
</Phone>
</Root>

获取xml数据的方法

可以根据根据节点的名字查询数据,要是输入一级节点,就是查询全部的,要是输入二级节点怎么会获取所有二级节点的该节点数据
XmlNodeList xmlNodeList = xmldoc.SelectNodes("Root/Phone/BackGround");
        public void Get()
{
try
{
XmlDocument xmldoc = new XmlDocument();
//加载xml文件
xmldoc.Load(xmlPath); //查询全部数据
XmlNodeList xmlNodeList = xmldoc.SelectNodes("Root/Phone");
if (xmlNodeList == null || xmlNodeList.Count <= ) return; foreach (XmlNode item in xmlNodeList)
{
//节点属性
var bgdescription = item.Attributes["Name"].Value;
foreach (XmlNode citem in item.ChildNodes)
{
var bgDes = citem.Attributes["Description"].Value;
//节点内容
var desTxt = citem.InnerText;
//节点名字
var nodeName = citem.Name;
}
}
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}