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. HDU5909 Tree Cutting(树形DP + FWT)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5909 Description Byteasar has a tree T with n ve ...

  2. solr DIH 知识梳理

    solr DIH 知识梳理 web.xml中listener配置 <listener> <listener-class>org.apache.solr.handler.data ...

  3. Flask_more1

    #DB ``` import os basedir = os.path.abspath(os.path.dirname(__file__))   SQLALCHEMY_DATABASE_URI = ' ...

  4. C# 完整List例子

    C# List Following examples show how to create and manipulate with .NET strongly typed list List<T ...

  5. webform 分页、组合查询综合使用

    界面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx ...

  6. MySQL字符集

    字符集的选择 1.如果数据库只需要支持中文,数据量很大,性能要求也很高,应该选择双字节定长编码的中文字符集(如GBK).因为相对于UTF-8而言,GBK"较小",每个汉字只占2个字 ...

  7. 对Java中正则表达式的一些理解

    2016-12-11 22:26:18 正则表达式的意义:正则表达式是一个字符串处理工具,可以对字符串进行查找/提取/分割/替换等等,也可以对用户输入的内容进行匹配. 常用的预定义字符就不解释了,网上 ...

  8. centos下python中添加easygui模块

    前提:python中要集成Tkinter,Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同 ...

  9. SQL Server CONVERT() 截取日期

    SELECT CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSELECT CONVERT(varchar(100), GETDATE() ...

  10. JDBC的连接和操作

    package Test; import java.sql.*; public class Test21 { public static void main(String[] args) { Conn ...