如何使用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内容:
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内容:
< 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
books.books dbBook = books.books.Load( " books.xml " );
Step 6: 然后,你可以直接用linq query dbBook对象
select b;
// 当前booklist中包含books.xml所有的数据
Step 7:QA
以上就是LINQ To XSD的基本运用
嗯,其实如果你要进行复杂操作的话,
只要你会LINQ进行Query的话,问题都不是很大。
其实XSD生成出来的类,还是提供了一些基本的操作
如:ADD,Delete,Remove,Save
// remove it
foreach (var b in book001)
dbBook.book.Remove(b);
// Save File
dbBook.Save( " books.xml " );
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 " );