最近做项目遇到了配置xml的问题,起初觉得xml配置颇有一些麻烦,但是通过使用xml for linq后,就觉得配置xml也没有想象中的那么难。
//通过AppDomain对象来获取当前路径下的绝对路径值
//通过这种方法伪造相对路径
var ss= AppDomain.CurrentDomain.BaseDirectory;
//这里加上自己的文件名
string XmlFile = ss"//Persenxml//Persen.xml";
//XDocument 这是xmlinq对象 需要引入命名空间
XDocument xdocument = XDocument.Load(XmlFile);
上面就是加载初始化了xml对象,接下来就是正事了,说起增删查改,操纵数据库进行增删查改已经可以很轻松了,但是对xml这种节点类型的进行增删查改还真的不会,很是蒙蔽了一会,这是用来测试的xml文件
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
<User>
<UserID>1</UserID>
<UserName>踏浪帅</UserName>
</User>
<User>
<UserID>2</UserID>
<UserName>wujunyang</UserName>
</User>
<User>
<UserID>3</UserID>
<UserName>cnblogs</UserName>
</User>
</Root>
接下来是第一条,遍历xml里面的所有内容,也就是查询
var Users = from userInfo in xdocument.Element("Root").Elements()
select new { UserID = userInfo.Element("UserID").Value, UserName = userInfo.Element("UserName").Value };
foreach (var item in Users)
{
Console.WriteLine(string.Format("用户ID为:{0};名字为:{1}", item.UserID, item.UserName));
}
然后我们都知道,便利肯定还是有带条件便利,这段代码的含义就是查询所有userid>3的数据
var UserForWhere = from userInfo in xdocument.Element("Root").Elements() where Convert.ToInt32(userInfo.Element("UserID").Value) > 1 select new { UserID = userInfo.Element("UserID").Value, UserName = userInfo.Element("UserName").Value };
foreach (var item in UserForWhere)
{
Console.WriteLine(string.Format("用户ID为:{0};名字为:{1}", item.UserID, item.UserName));
}
然后是像现有数据插入一条xml数据,先写好要插入的内容和位置,然后用xml操作对象进行新增
XElement InsertRoot = new XElement("User", new XElement("UserID", "4"), new XElement("UserName", "厦门"));
xdocument.Element("Root").Add(InsertRoot);
xdocument.Save(XmlFile);
Console.WriteLine("插入节点成功");
这是插入后的记过,新增了一个userid=4的数据记录
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
<User>
<UserID>1</UserID>
<UserName>踏浪帅</UserName>
</User>
<User>
<UserID>2</UserID>
<UserName>wujunyang</UserName>
</User>
<User>
<UserID>3</UserID>
<UserName>cnblogs</UserName>
</User>
<User>
<UserID>4</UserID>
<UserName>厦门</UserName>
</User>
</Root>
接下来是更新xml数据内容
XElement UserUpdate = (from userInfo in xdocument.Element("Root").Elements() where Convert.ToInt32(userInfo.Element("UserID").Value) == 3 select userInfo).SingleOrDefault();
if (UserUpdate != null)
{
UserUpdate.Element("UserName").Value = "www.cnblogs.com/wujy";
xdocument.Save(XmlFile);
}
Console.WriteLine("更新节点成功");
接下来就是删除指定的xml数据记录
XElement UserDelete = (from userInfo in xdocument.Element("Root").Elements()
where Convert.ToInt32(userInfo.Element("UserID").Value) == 2
select userInfo).SingleOrDefault();
if (UserDelete != null)
{
UserDelete.Remove();
xdocument.Save(XmlFile);
}
Console.WriteLine("删除节点成功");
好了以上就是简单的linq for xml的增删查改了,总的来讲还是很简单的,只要明白怎么将lamda表达式和xml操作对象结合,就可以很简单的操作xml文档了,只是寻找节点还是一个很麻烦的事情,希望各位高手可以给出指点和批评