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. Struts 2

    <默认>execute -- 默认方法success -- 默认返回值 <配置><package><package name="default&qu ...

  2. Python 进程间通信

    from multiprocessing import Process,Queue import os,time,random def write(q): print('Process to writ ...

  3. 【Java】JDK类 CountDownLatch

    一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CountDownLatch.由于调用了 countDown() 方法,所以在当前计数到达 ...

  4. java的基础知识文件操作和标识符

    1.文件夹的操作 dir :显示当前文件夹中的所有文件和文件夹. cd 路径:  进入到指定的路径. cd ..  : 回到上一级目录 cd  \ : 回到当前目录的跟目录 md 文件夹名  创建一个 ...

  5. jquery中focus()失效怎么解决

    又学到一个新的知识! 今天在写表单验证的时候遇到一个关于获取焦点的focus()问题. 场景说明:在验证密码输入格式不对之后,弹出alert()提示框,提示密码不对,请重新输入.同时清空密码框并获得焦 ...

  6. tornado web 框架的认识

    tornado 简介 1,概述 Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本.Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的 ...

  7. idea 根据数据库表自动创建持久化类

    一.点击最右边的Database: 二.点击,再点DataSource选择数据库类型,配置数据库信息: 三.打开项目结构,选择,找到你的项目,点击,添加hibernate: 四.如果有现成的cfg.x ...

  8. HDU2842 矩阵乘法

    Chinese Rings Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. 下载apk文件浏览器会直接打开并显示乱码的问题

    今天同事反映他的apk文件在自己的老项目中下载有问题:下载apk文件浏览器会直接打开并显示乱码,在别的项目中就没有问题. 后分析response的content-type发现,老项目的类型是text/ ...

  10. .NET C#-- 利用BeginInvoke与EndInvoke完成异步委托方法并获取方法执行返回值示例

    //定义委托 delegate string MyDelegate(string name); //定义委托调用函数 public string Hello(string name) { Thread ...