如何使用LINQ to XML创建xml
这篇文章给大家分享的是有关如何使用LINQ to XML创建xml的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
1、LINQ to XML类
以下的代码演示了如何使用LINQ to XML来快速创建一个xml:
public static void CreateDocument(){ string path = @"d:\website"; XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"), new XElement("Root", "root")); xdoc.Save(path);}
运行该示例将会得到一个xml文件,其内容为:
root
2、XElement类
XElement 类是 LINQ to XML 中的基础类之一。 它表示一个 XML 元素。 可以使用该类创建元素;更改元素内容;添加、更改或删除子元素;向元素中添加属性;或以文本格式序列化元素内容。 还可以与 System.Xml 中的其他类(例如 XmlReader、XmlWriter 和 XslCompiledTransform)进行互操作。
使用LINQ to XML创建xml文档有很多种方式,具体使用哪种方法要根据实际需要。而创建xml文档最简单、最常见的方式是使用XElement类。以下的代码演示了如何使用XElement类创建一个xml文档:
显示行号 复制代码 ? 这是一段程序代码。
public static void CreateCategories(){ string path = @"d:\website"; XElement root = new XElement("Categories", new XElement("Category", new XElement("CategoryID", Guid.NewGuid()), new XElement("CategoryName", "Beverages") ), new XElement("Category", new XElement("CategoryID", Guid.NewGuid()), new XElement("CategoryName", "Condiments") ), new XElement("Category", new XElement("CategoryID", Guid.NewGuid()), new XElement("CategoryName", "Confections") ) ); root.Save(path);}
运行该示例将会得到一个xml文件,其内容为:
57485174-46fc-4e8c-8d98-d25b53d504a1 Beverages 1474dde1-8014-48f7-b093-b47ca5d5b770 Condiments 364224e0-e002-4939-90fc-0fd93e0cf35b Confections
XElement类包含了许多方法,这些方法使得处理xml变得轻而易举。有关这些方法请参照MSDN。
其中,Save、CreateReader、ToString和WriteTo方法是比较常用的三个方法:
3、XAttribute类
XAttribute类用来处理元素的属性,属性是与元素相关联的"名称-值"对,每个元素中不能有名称重复的属性。使用XAttribute类与使用XElement类的操作十分相似,下面的示例演示了如何在创建xml树时为其添加一个属性:
public static XElement CreateCategoriesByXAttribute(){ XElement root = new XElement("Categories", new XElement("Category", new XAttribute("CategoryID", Guid.NewGuid()), new XElement("CategoryName", "Beverages") ), new XElement("Category", new XAttribute("CategoryID", Guid.NewGuid()), new XElement("CategoryName", "Condiments") ), new XElement("Category", new XAttribute("CategoryID", Guid.NewGuid()), new XElement("CategoryName", "Confections") ) ); root.Save(path); return root;}
运行该示例将会得到一个xml文件,其内容为:
Beverages Condiments Confections
XAttribute类的方法比较少,常用的三个是:
以下的示例使用Remove来删除第一个元素的CategoryID属性:
public static void RemoveAttribute(){ XElement xdoc = CreateCategoriesByXAttribute(); XAttribute xattr = xdoc.Element("Category").Attribute("CategoryID"); xattr.Remove(); xdoc.Save(path);}
运行该示例将会得到一个xml文件,其内容为:
Beverages Condiments Confections
作为尝试,试一试以下删除属性的方法:
public static void RemoveAttributeByDoc(){ XElement xdoc = CreateCategoriesByXAttribute(); XAttribute xattr = xdoc.Attribute("CategoryID"); xattr.Remove(); xdoc.Save(path);}
运行该示例将会抛出一个空引用异常,因为元素Categories没有一个叫做CategoryID的属性。
4、XDocument类
XDocument类提供了处理xml文档的方法,包括声明、注释和处理指令。一个XDocument对象可以包含以下内容:
下面的示例创建了一个简单的xml文档,它包含几个元素和一个属性,以及一个处理指令和一些注释:
public static void CreateXDocument() { XDocument xdoc = new XDocument( new XProcessingInstruction("xml-stylesheet", "title='EmpInfo'"), new XComment("some comments"), new XElement("Root", new XElement("Employees", new XElement("Employee", new XAttribute("id", "1"), new XElement("Name", "Scott Klein"), new XElement("Title", "Geek"), new XElement("HireDate", "02/05/2007"), new XElement("Gender", "M") ) ) ), new XComment("more comments") ); xdoc.Save(path); }
运行该示例将会得到一个xml文件,其内容为:
Scott Klein Geek 02/05/2007 M
XDocument类包含多个与XElement类相同的方法,具体内容可以参阅MSDN。需要注意的是,处理节点和元素的大部分功能都可以通过XElement获得,只有当绝对需要文档层次的处理能力,以及需要访问注释、处理指令和声明时,才有使用XDocument类的必要。
创建了xml文档后,可以使用NodesAfterSelf方法返回指定的XElement元素之后的所有同级元素。需要注意的是,此方法只包括返回集合中的同级元素,而不包括子代。此方法使用延迟执行。以下代码演示了这一过程:
public static void NodesAfterSelf(){ XElement root = new XElement("Categories", new XElement("Category", new XElement("CategoryID", Guid.NewGuid()), new XElement("CategoryName", "食品"), new XElement("Description", "可以吃的东西") ) ); foreach (var item in root.Element("Category").Element("CategoryID").NodesAfterSelf()) { Console.WriteLine((item as XElement).Value); }}
二、LINQ to XML编程概念
本节将介绍LINQ to XML编程的相关概念,例如如何加载xml、创建全新xml、操纵xml的信息以及遍历xml文档。
1、加载已有的xml
使用LINQ to XML加载xml可以从多种数据源获得,例如字符串、XmlReader、TextReader或文件。
下面的示例演示了如何从文件中加载xml:
public static void LoadFromFile(){ XElement root = XElement.Load(path); Console.WriteLi
也可以使用Parse方法从一个字符串加载xml:
public static void LoadFromString() { XElement root = XElement.Parse(@""); Console.WriteLine(root.ToString()); } 1 Beverages Soft drinks, coffees, teas, beers, and ales
2、保存xml
在前面的示例中曾多次调用XElement对象的Save方法来保存xml文档,在这里就不冗述了。
3、创建xml
在前面的示例中曾多次调用XElement对象的构造函数来创建xml文档,在这里就不冗述了。需要说明的是,在使用LINQ to XML创建xml文档时,会有代码缩进,这使代码的可读性大大加强。
4、遍历xml
使用LINQ to XML在xml树中遍历xml是相当简单的。只需要使用XElement和XAttribute类中所提供的方法。Elements和Element方法提供了定位到某个或某些元素的方式。下面的示例演示了如何遍历xml树,并获取指定元素的方式:
public static void Enum(){ XElement root = new XElement("Categories"); using (NorthwindDataContext db = new NorthwindDataContext()) { root.Add( db.Categories .Select ( c => new XElement ( "Category" , new XElement("CategoryName", c.CategoryName) ) ) ); } foreach (var item in root.Elements("Category")) { Console.WriteLine(item.Element("CategoryName").Value); }}
上述代码运行的结果为:
是不是很简单呢?Nodes()、Elements()、Element(name)和Elements(name)方法为xml树的导航提供了基本功能。
5、操纵xml
LINQ to XML一个重要的特性是能够方便地修改xml树,如添加、删除、更新和复制xml文档的内容。
I.插入
使用XNode类的插入方法可以方便地向xml树添加内容:
在下面的示例中,使用AddAfterSelf方法向现有xml中添加一个新节点:
public static void AddAfterSelf(){ XElement root = XElement.Parse(@""); XElement xele = root.Element("Category").Element("CategoryName"); xele.AddAfterSelf(new XElement("AddDate", DateTime.Now)); root.Save(path);} 1 Beverages Soft drinks, coffees, teas, beers, and ales
运行该示例将会得到一个xml文件,其内容为:
1 Beverages 2010-01-31T03:08:51.813736+08:00 Soft drinks, coffees, teas, beers, and ales
当需要添加一个元素到指定节点之前时,可以使用AddBeforeSelf方法。
II.更新
在LINQ to XML中更新xml内容可以使用以下几种方法:
在下面的示例中使用了ReplaceWith与SetElementValue方法对xml进行了更新操作:
public static void Update(){ XElement root = XElement.Parse(@""); root.Element("Category").Element("CategoryID").ReplaceWith(new XElement("ID", "2")); root.Element("Category").SetElementValue("CategoryName", "test data"); root.Save(path);} 1 Beverages Soft drinks, coffees, teas, beers, and ales
运行该示例将会得到一个xml文件,其内容为:
2 test data Soft drinks, coffees, teas, beers, and ales
III.删除
可以使用Remove(XElement)与RemoveAll方法来删除xml。
在下面的示例中,使用了RemoveAll方法:
} public static void Remove() { string path = @"d:\"; XElement root = XElement.Parse(@""); root.RemoveAll(); root.Save(path); } 1 Beverages Soft drinks, coffees, teas, beers, and ales
运行该示例将会得到一个xml文件,其内容为:
在下面的示例中,使用了Remove方法删除了xml的Description元素:
public static void Remove(){ XElement root = XElement.Parse(@""); root.Element("Category").Element("Description").Remove(); root.Save(path);} 1 Beverages Soft drinks, coffees, teas, beers, and ales
运行该示例将会得到一个xml文件,其内容为:
1 Beverages
6、处理属性
I.添加
LINQ to XML添加属性与添加元素师类似的,可以使用构造函数或者Add方法来添加属性:
public static void AddAttribute(){ XElement root = new XElement("Categories", new XElement("Category", new XAttribute("CategoryID", "1"), new XElement("CategoryName", "Beverages"), new XElement("Description", "Soft drinks, coffees, teas, beers, and ales") ) ); root.Element("Category").Add(new XAttribute("AddDate", DateTime.Now.ToShortDateString())); root.Save(path);}
运行该示例将会得到一个xml文件,其内容为:
Beverages Soft drinks, coffees, teas, beers, and ales
II.检索
检索属性可以使用Attribute(name)方法:
public static void SelectAttribute(){ XElement root = new XElement("Categories", new XElement("Category", new XAttribute("CategoryID", "1"), new XElement("CategoryName", "Beverages"), new XElement("Description", "Soft drinks, coffees, teas, beers, and ales") ) ); XAttribute xattr = root.Element("Category").Attribute("CategoryID"); Console.WriteLine(xattr.Name); Console.WriteLine(xattr.Value);}
上述代码的运行结果为:
CategoryID1
感谢各位的阅读!关于"如何使用LINQ to XML创建xml"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!