LINQ To XSD

如何使用LINQ通过XSD,查询XML中的数据?

在工作开始之前,需要安装LINQ To XSD Alpha 2。虽然是Alpha版本,不过安装,使用没有什么问题的。

Step 1: 创建一个LINQ To XSD Console Application
       

其实当我们创建XSD Preview Project,在Reference中会增加一个Assembly:Microsoft.Xml.Schema.Linq.dll.
此程序集主要工作:生成XML、XSD 文档。

Step 2: 创建一个XML Schema

Step 3: 要指引Visual Studio 去用Linq To XSD技术生成相应的classes.

Step 4: 编译Project,使用Object Explorer查看当前的XSD,或者是XSD的namespace.
             可以看到Books,BooksForm类,这些就是自动生成出来的Wrapper classe,
             此时就可以用LINQ进行Query了。

 

相关XSD内容:

< xsd:schema  xmlns:xsd ="http://www.w3.org/2001/XMLSchema"
            targetNamespace
="books"
            xmlns:bks
="books" >

  
< xsd:element  name ="books"  type ="bks:BooksForm" />

  
< xsd:complexType  name ="BooksForm" >
    
< xsd:sequence >
      
< xsd:element  name ="book"
                  type
="bks:BookForm"
                  minOccurs
="0"
                  maxOccurs
="unbounded" />
      
</ xsd:sequence >
  
</ xsd:complexType >

  
< xsd:complexType  name ="BookForm" >
    
< xsd:sequence >
      
< xsd:element  name ="author"    type ="xsd:string" />
      
< xsd:element  name ="title"     type ="xsd:string" />
      
< xsd:element  name ="genre"     type ="xsd:string" />
      
< xsd:element  name ="price"     type ="xsd:float"   />
      
< xsd:element  name ="pub_date"  type ="xsd:date"   />
      
< xsd:element  name ="review"    type ="xsd:string" />
    
</ xsd:sequence >
    
< xsd:attribute  name ="id"    type ="xsd:string" />
  
</ xsd:complexType >
</ xsd:schema >

相关XML内容:

<? xml version="1.0" ?>
< x:books  xmlns:x ="books" >
   
< book  id ="bk001" >
      
< author > Robert E. Howard </ author >
      
< title > The Coming of Conan the Cimmerian </ title >
      
< genre > Science Fiction & Fantasy </ genre >
      
< price > 44.95 </ price >
      
< pub_date > 2003-12-02 </ pub_date >
      
< review > Conan let go, spat blood from his mouth.. </ review >
   
</ book >

   
< book  id ="bk002" >
      
< author > Terry Goodkind </ author >
      
< title > Wizard's First Rule </ title >
      
< genre > Fantasy </ genre >
      
< price > 24.95 </ price >
      
< pub_date > 2001-06-23 </ pub_date >
      
< review > My world contest best book </ review >
   
</ book >

   
< book  id ="bk003" >
      
< author > HP Lovecraft </ author >
      
< title > Call of Cthulhu </ title >
      
< genre > Science Fiction & Fantasy </ genre >
      
< price > 42 </ price >
      
< review > I am writing this under an appreciable mental strain, 
        since by tonight I shall be no more
</ review >
   
</ book >
</ x:books >

 

Step 5: 首先打开一个XML DataBase  

targetNamespace = " books "   -- 当前XSD的namespace
books.books dbBook 
=  books.books.Load( " books.xml " );

             
Step 6: 然后,你可以直接用linq query dbBook对象 

var bookList  =  from b  in  dbBook.book
               select b; 
// 当前booklist中包含books.xml所有的数据

Step 7:QA
             以上就是LINQ To XSD的基本运用
             嗯,其实如果你要进行复杂操作的话,
             只要你会LINQ进行Query的话,问题都不是很大。
             其实XSD生成出来的类,还是提供了一些基本的操作
             如:ADD,Delete,Remove,Save  

 Remove:
             
// remove it
              foreach  (var b  in  book001)
                 dbBook.book.Remove(b);
             
// Save File
             dbBook.Save(  " books.xml "  );

 

Create:
            books.BookForm itemToAdd 
=   new  books.BookForm();
            itemToAdd.author 
=   " XXXXX " ;
            itemToAdd.genre 
=   " XXXX " ;
            itemToAdd.id 
=   " XXXX " ;
            itemToAdd.price 
=  XXX;
            itemToAdd.pub_date 
=  Convert.ToDateTime(  " XXXXXX "  );
            itemToAdd.title 
=   " XXXX " ;

            
// add it to database
            dbBook.book.Add( itemToAdd );

            
// save the new database
            dbBook.Save(  " books.xml "  );
好了,就到这里。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值