如何使用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" );