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. DB Scan算法的分析与实现

    摘自:http://www.cnblogs.com/weixliu/archive/2012/12/08/2808815.html 根据上面第二个数据集的簇的形状比较怪异,分簇结果应该是连起来的属于一 ...

  2. unity 改变场景

    public class GameManager : MonoBehaviour { public void OnStartGame(int sceneName) { SceneManager.Loa ...

  3. 面向对象课后深入学习(C++ 类的静态成员详细讲解)

    今天在刚申请了博客,一下午都在写那个随笔,所以说好的来看c++的也放在了最后,下星期就考试了,这个类的静态成员是我不是很懂的,在网上 看到一片很详细的博客考下来回去慢慢看. 在C++中,静态成员是属于 ...

  4. Linux 学习记录

    整理学习Linux操作系统遇到的不理解的概念.逐个进行补充.我们用的版本是CentOs. what's the gcc? what's the yum? what's the wget?

  5. java cookie 工具类

    package com.xxx.xxx.xxx.xxx; import java.net.URLDecoder; import java.net.URLEncoder; import javax.se ...

  6. / fluxChatDemo / 系列 ——fluxDemoChat 组件编写

    还是用各部分来表示过程吧,没文采,就先这样记着吧 嘻嘻 梳理问题: 编写es6风格的组件时,需要引入import React from ‘react’ 然后页面就华丽丽的展示出了我写的1.2两个字 在 ...

  7. linux终端 字符界面 显示乱码

    方法一:配置SSH工具 SecureCRT中文版配置 [全局选项]→[默认会话]→[编辑默认设置]→[终端]→[外观]→[字体]→[新宋体 10pt CHINESE_GB2312]→[字符编码 UTF ...

  8. CSS Reset

    html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, ac ...

  9. angularjs服务-service

    Service 的特性 ①service都是单例的 ②service由$injector 负责实例化 ③service在整个应用的声明周期中存在,可以用来共享数据 ④在需要使用的地方利用依赖注入ser ...

  10. Unity小游戏制作 - 暗影随行

    用Unity制作小游戏 - 暗影惊吓 最近玩了一个小游戏,叫做暗影惊吓,虽然是一个十分简单的小游戏,但是感觉还是十分有趣的.这里就用Unity来实现一个类似的游戏. 项目源码:DarkFollow 主 ...