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" );
好了,就到这里。。。
原文地址:https://www.cnblogs.com/RuiLei/p/1379517.html