.NET: XML
XML在平常生活中用得很多,它的结构很简单,跟windows explorer有点像。
对它进行操作主要有三种方式:XmlDocument,
假设有这么一个XML文件Book.XML
<?xml version="1.0" encoding="utf-8"?>
<bookstore>
<!--记录书本的信息-->
<book Type="必修课" ISBN="7-11-19149-2">
<title>数据结构</title>
<author>严蔚敏</author>
<price>30.00</price>
</book>
<book Type="必修课" ISBN="7-111-19149-3">
<title>路由型与交换型互联网基础</title>
<author>程青梅</author>
<price>27.00</price>
</book>
<book Type="必修课" ISBN="7-111-19149-4">
<title>计算机硬件技术基础</title>
<author>李基灿</author>
<price>25.00</price>
</book>
<book Type="必修课" ISBN="7-111-19149-5">
<title>软件质量保证与管理</title>
<author>朱少敏</author>
<price>39.00</price>
</book>
<book Type="必修课" ISBN="7-111-19149-6">
<title>算法设计与分析</title>
<author>王红梅</author>
<price>23.00</price>
</book>
<book Type="选修课" ISBN="7-111-19149-1">
<title>计算机操作系统</title>
<author>林美苏</author>
<price>28.00</price>
</book>
</bookstore>
再定义一个BookModel类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleTest
{
public class BookModel
{
public BookModel()
{
}
private string bookType;
public string BookType
{
get { return bookType; }
set { bookType = value; }
}
private string bookISBN;
public string BookISBN
{
get { return bookISBN; }
set { bookISBN = value; }
}
private string bookName;
public string BookName
{
get { return bookName; }
set { bookName = value; }
}
private string bookAuthor;
public string BookAuthor
{
get { return bookAuthor; }
set { bookAuthor = value; }
}
private double bookPrice;
public double BookPrice
{
get { return bookPrice; }
set { bookPrice = value; }
}
}
}
1. XmlDocument
分别演示了读取,增加,修改和删除
2. 用XmlTextReader和XmlTextWriter
XmlTextWriter要覆盖原来的文件,显得很麻烦,这里就不写了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleTest
{
public class Program
{
static private void showXmlInfo(string path)
{
XmlDocument doc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create(path, settings);
doc.Load(reader);
XmlNode xn = doc.DocumentElement;
XmlNodeList xnl = xn.ChildNodes;
List<BookModel> bookModelList = new List<BookModel>();
foreach (XmlNode xmlNode in xnl)
{
BookModel bookModel = new BookModel();
XmlElement xe = (XmlElement)xmlNode;
bookModel.BookISBN = xe.GetAttribute("ISBN").ToString();
bookModel.BookType = xe.GetAttribute("Type").ToString();
XmlNodeList xnlChild = xe.ChildNodes;
bookModel.BookName = xnlChild.Item().InnerText;
bookModel.BookAuthor = xnlChild.Item().InnerText;
bookModel.BookPrice = Convert.ToDouble(xnlChild.Item().InnerText);
bookModelList.Add(bookModel);
}
foreach (BookModel book in bookModelList)
{
Console.WriteLine("Book ISBN: {0} Type: {1}", book.BookISBN, book.BookType);
Console.WriteLine("\tBookName: {0}", book.BookName);
Console.WriteLine("\tBookAuthor: {0}", book.BookAuthor);
Console.WriteLine("\tBookPrice: {0}", book.BookPrice);
}
reader.Close();
}
static private void showXmlInfoByTextReader(string path)
{
XmlTextReader reader = new XmlTextReader(path);
List<BookModel> modelList = new List<BookModel>();
BookModel model = new BookModel();
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name == "book")
{
model.BookType = reader.GetAttribute();
model.BookISBN = reader.GetAttribute();
}
if (reader.Name == "title")
{
model.BookName = reader.ReadElementString().Trim();
}
if (reader.Name == "author")
{
model.BookAuthor = reader.ReadElementString().Trim();
}
if (reader.Name == "price")
{
model.BookPrice = Convert.ToDouble(reader.ReadElementString().Trim());
}
}
if (reader.NodeType == XmlNodeType.EndElement)
{
modelList.Add(model);
model = new BookModel();
}
}
modelList.RemoveAt(modelList.Count - );
foreach (BookModel book in modelList)
{
Console.WriteLine("Book ISBN: {0} Type: {1}", book.BookISBN, book.BookType);
Console.WriteLine("\tBookName: {0}", book.BookName);
Console.WriteLine("\tBookAuthor: {0}", book.BookAuthor);
Console.WriteLine("\tBookPrice: {0}", book.BookPrice);
}
reader.Close();
}
static void Main(string[] args)
{
const string PATH = @"C:\Users\Administrator\Desktop\Demo\Book.XML";
Console.WriteLine("Read by XmlDocument...\n");
showXmlInfo(PATH);
Console.WriteLine("\nRead by XmlTextReader...\n");
showXmlInfoByTextReader(PATH);
XmlDocument doc = new XmlDocument();
doc.Load(PATH);
XmlNode root = doc.DocumentElement;
XmlElement xelKey = doc.CreateElement("book");
xelKey.SetAttribute("Type", "选修课");
xelKey.SetAttribute("ISBN", "7-111-19149-7");
XmlElement xelTitle = doc.CreateElement("title");
xelTitle.InnerText = "计算机算法与结构";
XmlElement xelAuthor = doc.CreateElement("author");
xelAuthor.InnerText = "程晓旭";
XmlElement xelPrice = doc.CreateElement("price");
xelPrice.InnerText = "50.00";
xelKey.AppendChild(xelTitle);
xelKey.AppendChild(xelAuthor);
xelKey.AppendChild(xelPrice);
root.AppendChild(xelKey);
doc.Save(PATH);
Console.WriteLine("\nApending one child by XmlDocument...\n");
showXmlInfo(PATH);
xelKey.GetElementsByTagName().InnerText = ".NET深入浅出";
xelKey.GetElementsByTagName().InnerText = "冯小兵";
xelKey.GetElementsByTagName().InnerText = "49.00";
doc.Save(PATH);
Console.WriteLine("\nEditting one child...\n");
showXmlInfo(PATH);
xelKey.ParentNode.RemoveChild(xelKey);
doc.Save(PATH);
Console.WriteLine("\nRemove one child...\n");
showXmlInfo(PATH);
}
}
}
用windowsForm的listBox来显示的时候
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace WindowsTest
{
public partial class Form1 : Form
{
const string PATH = @"C:\Users\Administrator\Desktop\Demo\Book.XML";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load(PATH);
RecurseXmlDocument((XmlNode)doc.DocumentElement, );
}
private void RecurseXmlDocument(XmlNode root, int indent)
{
if (root == null) return;
if (root is XmlElement)
{
listBox1.Items.Add(root.Name.PadLeft(root.Name.Length + indent));
if (root.HasChildNodes)
{
RecurseXmlDocument(root.FirstChild, indent + );
}
if (root.NextSibling != null)
{
RecurseXmlDocument(root.NextSibling, indent);
}
}
else if (root is XmlText)
{
string text = ((XmlText)root).Value;
listBox1.Items.Add(text.PadLeft(text.Length + indent));
}
}
}
}
3. 用LINQ
3.0的新发现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleTest
{
public class Program
{
static private void showXmlInfoByLinq(string path)
{
XElement xe = XElement.Load(path);
IEnumerable<XElement> elements = from ele in xe.Elements("book")
select ele;
List<BookModel> modelList = new List<BookModel>();
foreach (var ele in elements)
{
BookModel model = new BookModel();
model.BookAuthor = ele.Element("author").Value;
model.BookName = ele.Element("title").Value;
model.BookPrice = Convert.ToDouble(ele.Element("price").Value);
model.BookISBN = ele.Attribute("ISBN").Value;
model.BookType = ele.Attribute("Type").Value;
modelList.Add(model);
}
foreach (BookModel book in modelList)
{
Console.WriteLine("Book ISBN: {0} Type: {1}", book.BookISBN, book.BookType);
Console.WriteLine("\tBookName: {0}", book.BookName);
Console.WriteLine("\tBookAuthor: {0}", book.BookAuthor);
Console.WriteLine("\tBookPrice: {0}", book.BookPrice);
}
}
static void Main(string[] args)
{
const string PATH = @"C:\Users\Administrator\Desktop\Demo\Book.XML";
Console.WriteLine("\nRead by XmlLinq...\n");
showXmlInfoByLinq(PATH);
XElement xe = XElement.Load(PATH);
XElement record = new XElement(
new XElement("book",
new XAttribute("Type", "选修课"),
new XAttribute("ISBN", "7-111-19149-8"),
new XElement("title", "敏捷开发"),
new XElement("author", "秦朗"),
new XElement("price", 34.00)
)
);
xe.Add(record);
xe.Save(PATH);
Console.WriteLine("\nApending one child by XmlLinq...\n");
showXmlInfoByLinq(PATH);
xe = XElement.Load(PATH);
IEnumerable<XElement> element = from ele in xe.Elements("book")
where ele.Attribute("ISBN").Value == "7-111-19149-8"
select ele;
)
{
XElement first = element.First();
first.SetAttributeValue("Type", "必修课");
first.ReplaceNodes(
new XElement("title", "敏捷开发框架"),
new XElement("author", "秦明"),
new XElement("price", 35.00)
);
}
xe.Save(PATH);
Console.WriteLine("\nEditting one child by XmlLinq...\n");
showXmlInfoByLinq(PATH);
xe = XElement.Load(PATH);
IEnumerable<XElement> elements = from ele in xe.Elements("book")
where ele.Attribute("ISBN").Value == "7-111-19149-8"
select ele;
)
{
elements.First().Remove();
}
xe.Save(PATH);
Console.WriteLine("\nRemoving one child by XmlLinq...\n");
showXmlInfoByLinq(PATH);
}
}
}
.NET: XML的更多相关文章
- XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法
在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...
- .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?
物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...
- WebApi接口 - 响应输出xml和json
格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...
- XML技术之DOM4J解析器
由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...
- UWP开发之Mvvmlight实践六:MissingMetadataException解决办法(.Net Native下Default.rd.xml配置问题)
最近完成一款UWP应用,在手机端测试发布版(Release)的时候应用莫名奇妙的强行关闭,而同样的应用包在PC端一点问题都没有,而且Debug版在两个平台都没有问题,唯独手机的Release版有问题. ...
- PHP中遍历XML之SimpleXML
简单来讲述一些XML吧,XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.XML是当今用于传输数据的两大工具之一,另外一个是json. 我们在PHP中使用XML也是用来传输数据, ...
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
- Mybatis XML配置
Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”
Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常. 即在 XML文档(0, 0)中有一个错误:缺少根元素. A: 首先看下代码: StringBuilder sb = new Stri ...
随机推荐
- php数据缓存
用php进行微信开发时,碰到access_token长久保存的问题,以前都是用框架里的Cache直接set.get一下就完了.现在没框架可用了,只好自己动手写一个cache暂时用. 这个Cache类用 ...
- 【转】设计模式(九)外观模式Facade(结构型)
设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...
- Android Studio工具修理集
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 1.Common依赖项目找不到.因为主项目没有引进setting.gradle 2.从Eclipse ...
- 在Android Studio 中正确使用adil ”绝对经典“
今天调用远程服务中遇到了一个问题,哎,调了2个小时,后来终于解决,总结来看还是对新的Android Studio 不够熟悉.那么....就可以睡觉啦!!! 在Android Studio中使用进程通信 ...
- aspx后台页面添加服务器控件
System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(); System.IO.StringWriter st ...
- Android 代码中文字在手机上显示乱码问题解决方法
在学习Android过程中,用于测试时发现,代码中的中文在真机上会显示乱码, 网上查阅了些资料,参考如下: http://www.androidchina.net/3024.html http://b ...
- Tomcat执行流程
- Top Five Communication Skills for Project Managers
Research among project managers globally identifies top communication skills for leading teams. Lead ...
- jQuery实现隔行变色
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- UILabel 添加图片
//设置显示图片 NSMutableAttributedString * cellAttributeStr = [[NSMutableAttributedString alloc]initWithSt ...