C#3.0之LINQ(3)

我们知道关于XML,W3C有一套DOM模型,C#语言有一套在DOM模型下操作XML的类库。但是在LINQ出现以后,微软又重新做了一套关于XML的模型,而且操作起来同那套DOM模型没什么两样,但是更加的简单。

下面看一下这套模型的图:

 

以上是一套新的类库。其中最核心的类就是XElement,不要看它的层次低,但是绝对是核心。还有一些其他特性与DOM模型不一样,其中之一就是XAttribute和XNode在同一个层次上,还有就是XDocument不再是必须的。其他不同点可以参考DOM模型自己比较。

下面用代码对比一下DOM模型和LINQ模型操作XML的区别:

// DOM模型

XmlDocument doc 
=   new  XmlDocument();
XmlElement name 
=  doc.CreateElement( " name " );
name.InnerText 
=   " Patrick Hines " ;
XmlElement phone1 
=  doc.CreateElement( " phone " );
phone1.SetAttribute(
" type " " home " );
phone1.InnerText 
=   " 206-555-0144 " ;        
XmlElement phone2 
=  doc.CreateElement( " phone " );
phone2.SetAttribute(
" type " " work " );
phone2.InnerText 
=   " 425-555-0145 " ;        
XmlElement street1 
=  doc.CreateElement( " street1 " );        
street1.InnerText 
=   " 123 Main St " ;
XmlElement city 
=  doc.CreateElement( " city " );
city.InnerText 
=   " Mercer Island " ;
XmlElement state 
=  doc.CreateElement( " state " );
state.InnerText 
=   " WA " ;
XmlElement postal 
=  doc.CreateElement( " postal " );
postal.InnerText 
=   " 68042 " ;
XmlElement address 
=  doc.CreateElement( " address " );
address.AppendChild(street1);
address.AppendChild(city);
address.AppendChild(state);
address.AppendChild(postal);
XmlElement contact 
=  doc.CreateElement( " contact " );
contact.AppendChild(name);
contact.AppendChild(phone1);
contact.AppendChild(phone2);
contact.AppendChild(address);
XmlElement contacts 
=  doc.CreateElement( " contacts " );
contacts.AppendChild(contact);
doc.AppendChild(contacts);
//LINQ模型

XElement contacts 
=
    
new  XElement( " contacts " ,
        
new  XElement( " contact " ,
            
new  XElement( " name " " Patrick Hines " ),
            
new  XElement( " phone " " 206-555-0144 "
                
new  XAttribute( " type " " home " )),
            
new  XElement( " phone " " 425-555-0145 " ,
                
new  XAttribute( " type " " work " )),
            
new  XElement( " address " ,
                
new  XElement( " street1 " " 123 Main St " ),
                
new  XElement( " city " " Mercer Island " ),
                
new  XElement( " state " " WA " ),
                
new  XElement( " postal " " 68042 " )
            )
        )
    );

从对比上我们也可以看出LINQ模型的简单性。我们还可以从LINQ模型上看出XElement的重要性。使用XElement不仅可以从头创建xml文件,还可以使用Load的方法从文件加载。还可以从数据库中取出所需元素,这就要用到LINQ TO SQL的东西了,同样可以从数组中取出元素。操作完成后可以使用Save方法进行保存。

下面简单介绍一下增删查改XML。

// 查询
foreach  (c  in  contacts.Nodes())  {
Console.WriteLine(c);
}

我们看到在输出XML元素的时候并不需要对每个元素进行强制的类型转换,这里C#编译器已经做了这些事情,它会在输出的时候调用每个元素的ToString()方法。

// 插入元素
XElement mobilePhone  =   new  XElement( " phone " " 206-555-0168 " );
contact.Add(mobilePhone);

这里只是很简单的演示一些操作,至于那些复杂的操作,只要DOM模型能实现的LINQ模型就一定能实现。插入的时候还可以使用AddAfterThis和AddBeforeThis等方法,提高效率。

//删除元素
contact.Element("phone").Remove();                                                      //删除某一具体元素
contact.Elements("phone").Remove();                                                    //删除一组元素
contacts.Element("contact").Element("address").RemoveContent();      //删除某一元素内容

删除元素还可以使适用SetElement方法,把某一元素设置为null也就是删除了这元素。

// 修改元素
contact.Element( " phone " ).ReplaceContent( " 425-555-0155 " );     // 这里是修改第一个phone元素的内容

当然同样可以使用SetElement方法,这里才是它的用武之地。

从上面简单的介绍我们可以清楚的看到,使用LINQ操作XML是多么的简单,这里使用的C#语法,如果要是使用VB.NET还会更简单。有一些方法在VB.NET中可以使用但是在C#中却没有。毕竟VB.NET是晚绑定语言,可以充分发挥它的优势。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值