Linq to XML

5 篇文章 0 订阅

一、 LINQ To XML常用类

  1. Linq To XML类的层次结构图:

2.抽象类基类:XObject

3.抽象基类:XNode

4.抽象基类:XContainer

5.XElement:

7.XAttribute

二. Loading XML

  XML能够被加载从文件系统中、URL和XMLReader中,通常的处理方式是采用XElement类的静态方法Load进行处理。例如:XElement element = XElement.Load("book.xml");

  在某些特殊情况下,XML文件中可能包含有某些空白字符【WihteSpace】,在加载过程中,根据不同的需求,可能过滤掉WithteSpace或者保留WitheSpace。可以运用Load的重载方法进行处理。如下所示:

  XElement element = XElement.Load("book.xml",LoadOptions.PreserveWhitespace); 枚举LoadOptions类结构图如下所示:

  从URL中加载XML采用同样的处理方式:

?
string xmlUrl = "http://msdn.microsoft.com/rss.xml" ;
XElement xelment = XElement.Load(xmlUrl, LoadOptions.PreserveWhitespace);

  在某些特殊情况下,XML可能是内存中的字符串,完全可以采用Parse方法将带有XML格式的字符串转化为XML。

?
XElement x = XElement.Parse(
@"<books>
<book>
<author>Don Box</author>
<title>Essential .NET</title>
</book>
<book>
<author>Martin Fowler</author>
<title>Patterns of Enterprise application architecture</title>
</book>
</books>" );

  

三.Create XML

  创建XML最简单的处理方式是调用函数式结构创建XML文档。掉XElement构造函数进行创建,构造函数如下所示:

?
Public XElement(XName name)
Public XElement(XName name, object content)
Public XElement(XName name,paras object [] content)

  例如:

?
XElement book = new XElement( "book" );
XElement name = new XElement( "name" , "Steve Eichert" );
XElement books = new XElement( "books" ,
new XElement( "book" , "LINQ in Action" ),
new XElement( "book" , "Ajax in Action" )
);

  

四.Adding Content to XML

  在日常的XML处理当中,可能会面临个XML节点添加属性、能容、子节点等操作。LING To XML 提供了强有力的API,以帮助Developer快速开发。常用API如下:

?
Public void Add( object content)
Public void Add( params object [] content)

  例如:添加元素

?
XElement book = new XElement( "book" );
book.Add( new XElement( "author" , "Dr.Seuss" ));

  输出:

  例如:添加属性

?
XElement book = new XElement( "book" );
book.Add( new XAttribute( "publicationDate" , "October 2005" ));

  输出:

  例如:添加元素、属性

?
XElement books = new XElement( "books" );
books.Add( new XElement( "book" ,
new XAttribute( "publicationDate" , "May 2006" ),
new XElement( "author" , "Chris Sells" ),
new XElement( "title" , "Windows Forms Programming" )
)
);

  输出:

  在日常工作中,可能还会经常使用如下几个添加XML节点的方法,AddFirst、AddAfterSelf、AddBeforeSelf。下面详细介绍其用法,请注意观察输出

Number One:Add

?
XElement root = new XElement( "Root" );
XElement firstChildren = new XElement( "FirstChildren" , "FirstChildren" );
root.Add(firstChildren); //as the first children node of the root node

  输出:

?
Number Two:AddFirst
<BR>XElement root = new XElement( "Root" );
XElement firstChildren = new XElement( "FirstChildren" , "FirstChildren" );
root.Add(firstChildren); //as the first children node of the root node
XElement firstNode = new XElement( "FirstNode" , "FirstNode" );
root.AddFirst(firstNode);

  输出:

?
Number Three:AddBeforeSelf
<BR>XElement root = new XElement( "Root" );
XElement firstChildren = new XElement( "FirstChildren" , "FirstChildren" );
root.Add(firstChildren); //as the first children node of the root node
XElement firstNode = new XElement( "FirstNode" , "FirstNode" );
root.AddFirst(firstNode);
XElement beforeFirstNode = new XElement( "BeforeFirstNode" , "BeforeFirstNode" );
firstNode.AddBeforeSelf(beforeFirstNode); // call the addbeforeself method

?
Number Four:AddAfterSelf
<BR> XElement root = new XElement( "Root" );
XElement firstChildren = new XElement( "FirstChildren" , "FirstChildren" );
root.Add(firstChildren); //as the first children node of the root node
XElement firstNode = new XElement( "FirstNode" , "FirstNode" );
root.AddFirst(firstNode);
XElement beforeFirstNode = new XElement( "BeforeFirstNode" , "BeforeFirstNode" );
     firstNode.AddBeforeSelf(beforeFirstNode); // call the addbeforeself method
XElement afterFirstNode = new XElement( "AfterFirstNode" , "AfterFirstNode" );
firstNode.AddAfterSelf(afterFirstNode);

Remove content from XML

?
books.Element( "Book" ).Remove(); //Remove the first book
books.Elements( "Book" ).Remove(); //Remove all books
或者
Books.SetElmentValue(“book”, null );

Update XML content

  XML中简单的文本元素更新可以调用SetElementValue方法。例如:源XML文档:

?
<books>
  <book>
<title>LINQ in Action</title>
<author>Steve Eichert</author>
  </book><BR></books>

更新author节点:

?
XElement element = XElement.Parse(
@"<books>
<book>
<title>LINQ in Action</title>
<author>Steve Eichert</author>
</book>
</books>"
);

element.Element("book").SetElementValue("author", "Bill Gates");

输出:

对SetElementValue方法而言,只能够用文本更新叶子节点的内容,不能够用元素更新叶子节点的内容,如果更新,出现:

  如果要用节点元素更新节点的内容,可以采用ReplaceNodes方法:

?
XElement element = XElement.Parse(
@"<books>
<book>
<title>LINQ in Action</title>
<author>Steve Eichert</author>
</book>
</books>"
);
element.Element( "book" ).Element( "author" ).ReplaceNodes( new XElement( "Name" , "Bill Gates" ));

  输出:

  当要替换掉某个XML节点,包括节点本身页面被替换,可以采用ReplaceWith方法,SetElementValue,ReplaceNodes仅仅更新节点内容。例如:

?
XElement element = XElement.Parse(
@"<books>
<book>
<title>LINQ in Action</title>
<author>Steve Eichert</author>
</book>
</books>"
);
element.Element( "book" ).Element( "author" ).ReplaceWith( new XElement( "Name" , "Bill Gates" ));

  输出:

Working with attribute

Public XAttribute(XName name,object value)

添加属性:

Book.add(new XAttribute(“pubDate”,”July 31,2006”));

修改属性:

Book.SetAttributeValue(“pubDate”,”October 1,2006”));

删除属性:

Book.Attribute(“pubDate”).Remove();

Saving XML

?
XElement books = new XElement( "books" ,
new XElement( "book" ,
new XElement( "title" , "LINQ in Action" ),
new XElement( "author" , "Steve Eichert" ),
new XElement( "author" , "Jim Wooley" ),
new XElement( "author" , "Fabrice Marguerie" )
)
);
books.Save( @"c:/books.xml" );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值