LINQ to XML操作XML文件的方法,如创建XML文件、添加新的元素到XML文件中、修改XML文件中的元素、删除XML文件中的元素等。

1. 创建XML文件

string xmlFilePath = Server.MapPath("Data/Product.xml");

XDocument doc = new XDocument
(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement
(
"Products",
new XElement
(
"Product",
new XAttribute("ID", ),
new XElement("ProductName", "LINQ to XML"),
new XElement("UnitPrice", ),
new XElement("Remark", "LINQ to XML操作")
)
)
); // 保存为XML文件
doc.Save(xmlFilePath); // 显示XML文件内容
Response.Write(doc);
// 设置网页显示的形式为XML文件
Response.ContentType = "text/xml";
Response.End();
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Products>
<Product ID="1">
<ProductName>LINQ to XML</ProductName>
<UnitPrice>10</UnitPrice>
<Remark>LINQ to XML操作</Remark>
</Product>
</Products>
XElement xml = new XElement
(
"Root",
new XElement("Product",
new XAttribute("ID", )
)
); xml.Save(Environment.CurrentDirectory + @"\" + "Product.xml");
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Product ID="1" />
</Root>

  根据从数据库中查询的数据结构生成一个XML文件:

using (NorthwindContext context = new NorthwindContext())
{
var products = from p in context.Products
select new
{
p.ProductID,
p.ProductName,
p.UnitPrice
}; var xml = new XElement
(
"Products",
from p in products.ToList()
select new XElement
(
"Product",
new XElement("ProductID", p.ProductID),
new XElement("ProductName", p.ProductName),
new XElement("UnitPrice", p.UnitPrice)
)
); xml.Save(Environment.CurrentDirectory + @"\" + "Products.xml");
}

2. 加载XML文件

XDocument doc = XDocument.Load(Environment.CurrentDirectory + @"\Product.xml");

foreach (XNode node in doc.Nodes())
{
Console.WriteLine(node.ToString());
}

  运行输出:

<!--Created by LINQ to XML-->
<Products>
<Product>
<ProductID>1</ProductID>
<ProductName>LINQ to XML</ProductName>
<UnitPrice>10</UnitPrice>
</Product>
<Product>
<ProductID>2</ProductID>
<ProductName>LINQ to SQL</ProductName>
<UnitPrice>20</UnitPrice>
</Product>
</Products>
XDocument doc = XDocument.Load(Environment.CurrentDirectory + @"\Product.xml");

foreach (XNode node in doc.Nodes().OfType<XElement>())
{
Console.WriteLine(node.ToString());
}
<Products>
<Product>
<ProductID>1</ProductID>
<ProductName>LINQ to XML</ProductName>
<UnitPrice>10</UnitPrice>
</Product>
<Product>
<ProductID>2</ProductID>
<ProductName>LINQ to SQL</ProductName>
<UnitPrice>20</UnitPrice>
</Product>
</Products>
XDocument doc = XDocument.Load(Environment.CurrentDirectory + @"\Product.xml");

foreach (XElement element in doc.Elements())
{
Console.WriteLine(element.ToString());
}
XElement el = XElement.Load(Environment.CurrentDirectory + @"\Product.xml");

foreach (XElement e in el.Elements("Product"))
{
Console.WriteLine(e.Element("ProductName").Value);
}
XDocument doc = XDocument.Load(Environment.CurrentDirectory + @"\" + "Product.xml");

var query = from p in doc.Descendants("Product")
where p.Attribute("ID").Value == ""
select p; foreach (var item in query)
{
Console.WriteLine(item.Element("ProductName").Value);
}
XDocument doc = XDocument.Load(Environment.CurrentDirectory + @"\" + "Product.xml");

var query = from p in doc.Root.Elements("Product")
select new
{
ProductID = p.Element("ProductID").Value,
ProductName = p.Element("ProductName").Value,
UnitPrice = p.Element("UnitPrice").Value
};
foreach (var item in query)
{
Console.WriteLine("{0}-{1}-{2}", item.ProductID, item.ProductName, item.UnitPrice);
}

3. 添加元素到XML文件

XElement el = XElement.Load(Server.MapPath("Data/Product.xml"));

XElement product = new XElement
(
"Product",
new XAttribute("ID", ),
new XElement("ProductName", "LINQ to Object"),
new XElement("UnitPrice", 20m),
new XElement("Remark", "")
); el.Add(product);
el.Save(Server.MapPath("Data/Product.xml"));
<?xml version="1.0" encoding="utf-8"?>
<Products>
<Product ID="1">
<ProductName>LINQ to XML</ProductName>
<UnitPrice>10</UnitPrice>
<Remark>LINQ to XML操作</Remark>
</Product>
<Product ID="2">
<ProductName>LINQ to Object</ProductName>
<UnitPrice>20</UnitPrice>
<Remark></Remark>
</Product>
</Products>

4. 修改XML文件中元素

XElement el = XElement.Load(Server.MapPath("Data/Product.xml"));

IEnumerable<XElement> products = from e in el.Elements("Product")
where e.Attribute("ID").Value == ""
select e;
if (products.Count() > )
{
XElement product = products.First();
product.SetAttributeValue("ID", );
product.ReplaceNodes
(
new XElement("ProductName", "LINQ to XML Version 2"),
new XElement("UnitPrice", )
);
} el.Save(Server.MapPath("Data/Product.xml"));
<?xml version="1.0" encoding="utf-8"?>
<Products>
<Product ID="3">
<ProductName>LINQ to XML Version 2</ProductName>
<UnitPrice>30</UnitPrice>
</Product>
<Product ID="2">
<ProductName>LINQ to Object</ProductName>
<UnitPrice>20</UnitPrice>
<Remark></Remark>
</Product>
</Products>

5. 删除XML文件中的元素

XElement el = XElement.Load(Server.MapPath("Data/Product.xml"));

IEnumerable<XElement> products = from e in el.Elements("Product")
where e.Attribute("ID").Value == ""
select e;
if (products.Count() > )
{
products.First().Remove();
} el.Save(Server.MapPath("Data/Product.xml"));
XElement xml = XElement.Load(Environment.CurrentDirectory + @"\" + "Product.xml");
xml.Element("Product").Remove(); // 删除第一个Product子元素
xml.Elements("Product").Remove(); // 删除全部Product子元素 xml.Save(Environment.CurrentDirectory + @"\" + "Product.xml");
xml.SetElementValue("Product", null); // 删除第一个Product子元素
XElement xml = XElement.Load(Environment.CurrentDirectory + @"\" + "Product.xml");
xml.Element("Product").SetElementValue("ProductID", ); // 修改ProductID子元素
xml.Element("Product").SetElementValue("ProductID", null); // 删除ProductID子元素

6. 将XML文件中属性转换为元素

XElement el = XElement.Load(Server.MapPath("Data/Product.xml"));

IEnumerable<XElement> products = from e in el.Elements("Product")
where e.Attribute("ID").Value == ""
select e;
if (products.Count() > )
{
XAttribute attr = products.First().FirstAttribute;
products.First().AddFirst
(
new XElement(attr.Name, attr.Value)
);
attr.Remove();
} el.Save(Server.MapPath("Data/Product.xml"));
<?xml version="1.0" encoding="utf-8"?>
<Products>
<Product>
<ID>1</ID>
<ProductName>LINQ to XML</ProductName>
<UnitPrice>30</UnitPrice>
</Product>
</Products>

7.XML节点属性

  1> 添加属性

XElement xml = XElement.Load(Environment.CurrentDirectory + @"\" + "Product.xml");

XElement product=(from p in xml.Elements("Product")
select p).First();
product.Add(new XAttribute("ID", )); xml.Save(Environment.CurrentDirectory + @"\" + "Product.xml");

  2> 修改属性

XElement xml = XElement.Load(Environment.CurrentDirectory + @"\" + "Product.xml");

XElement product = (from p in xml.Elements("Product")
select p).First();
product.SetAttributeValue("ID", ); xml.Save(Environment.CurrentDirectory + @"\" + "Product.xml");

  3> 删除属性

XElement xml = XElement.Load(Environment.CurrentDirectory + @"\" + "Product.xml");

XElement product = (from p in xml.Elements("Product")
select p).First();
product.Attribute("ID").Remove(); xml.Save(Environment.CurrentDirectory + @"\" + "Product.xml");

LINQ系列:LINQ to XML操作的更多相关文章

  1. C# ~ 从 XML 到 Linq 到 Linq to XML

    .XML 可扩展标记语言 (Extensible Markup Language), 标记 (markup) 是关键部分,是标准通用标记语言 (Standard Generalized Markup ...

  2. Linq to XML操作XML文件

    LINQ的类型 在MSDN官方文件中,LINQ分为几种类型: . LINQ to Objects(或称LINQ to Collection),这是LINQ的基本功能,针对集合对象进行查询处理,包括基本 ...

  3. C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换

    LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...

  4. Linq之Linq to XML

    目录 写在前面 系列文章 linq to xml 总结 写在前面 在很多情况下,都可以见到使用xml的影子.例如,在 Web 上,在配置文件.Microsoft Office Word 文件(将wor ...

  5. LINQ系列目录

    1. LINQ准备 1.1 C#中与LINQ相关特性 2. LINQ to Object 2.1 LINQ to Object投影操作符(Select/SelectMany/Let) 2.2 LINQ ...

  6. LinQ系列文章

    温故而知新,想着系统再学习一次LinQ知识点,发现园子里有个非常棒的系列文章,所以Mark下来,方便以后查阅! 系列博客导航: LINQ之路系列博客导航 LINQ之路 1:LINQ介绍 LINQ之路 ...

  7. LINQ 系列

    C#图解教程 第十九章 LINQ   LINQ 什么是LINQLINQ提供程序 匿名类型 方法语法和查询语法查询变量查询表达式的结构 from子句join子句什么是联结查询主体中的from…let…w ...

  8. Linq系列

    LINQ 图解 Linq中的Select——投影 Linq学习资源 Expert C# 5.0中的Linq部分

  9. Linq之Linq to Sql

    目录 写在前面 系列文章 Linq to sql 总结 写在前面 上篇文章介绍了linq to xml的相关内容,linq to xml提供一种更便捷的创建xml树,及查询的途径.这篇文章将继续介绍l ...

随机推荐

  1. 插头dp

    插头dp 感受: 我觉得重点是理解,算法并不是直接想出怎样由一种方案变成另一种方案.而是方案本来就在那里,我们只是枚举状态统计了答案. 看看cdq的讲义什么的,一开始可能觉得状态很多,但其实灰常简单 ...

  2. WindowManager.LayoutParams 札记

    WindowManager.LayoutParams wlp = new WindowManager.LayoutParams(width, height, WindowManager.LayoutP ...

  3. android studio安卓项目出现Error: Default Activity Not Found错误无法编译的解决方案

    项目明明是没有问题的,有时候突然就出现Error: Default Activity Not Found错误,以前出现过我重新安装了android studio 都没有用,后来在网上(http://s ...

  4. iOS tableview自定义cell上添加按钮实现删除功能

    在删除的时候,先删除数据源,再删除cell 但是,会发现一直崩: numberOfRowsInSection 解决方案:

  5. Python 爬虫2——环境配置

    关于环境配置的操作,其实非常简单,假如不使用第三方的框架的话,只需要安装Python即可完成后续的操作. 一.Python的安装和配置: windows系统的安装配置过程如下,假如是Mac系统,可参考 ...

  6. BJITJobs : 北京IT圈高端职位招聘信息,成功率最高的高端求职渠道

    你有实力,但比你差的人都升了,你的师弟都年薪50万了,你还是找不到机会.为什么你离高端机会总是差一步呢?其实你离成功就差一次机会,一个适合你的高端职位的信息! 招聘网站不靠谱:三大网站都是低端职位为主 ...

  7. iOS 属性修饰符记录 --不定时更新

    重新审视了一下OC在属性修饰符,特意记录一下来.以后不定时更新 > retain:只有在非ARC下才会有效,所有如果在ARC下使用了retain修饰也白搭 如以下的data属性用retain修饰 ...

  8. 领域驱动有感<上>

    最近看了<领域驱动设计:软件核心复杂性应对之道>,从字面上来看领域驱动就是解决软件复杂性问题的:然而领域驱动设计的门槛很高,没有很深厚的面向对象编码能力几乎不可能实践成功.Martin F ...

  9. CentOS6.5安装Tomcat

    安装说明 安装环境:CentOS-6.4 安装方式:源码安装 软件:apache-tomcat-7.0.56.tar.gz 下载地址:http://tomcat.apache.org/download ...

  10. 热门的PHP框架

    每个PHP框架都拥有各自独特的地方.同时PHP语言已经获得了巨大的认同并且成为了世界上最通用的服务器脚本语言.PHP也俨然成为了最容易学习的web动态开发语言.在PHP发展的同时,PHP框架也迅速崛起 ...