[英]Using C# LINQ to Search an XML file
我目前正在復習一些使用 LINQ 和 XML 和 ASP.NET C# 的教程。 我想創建一個搜索頁面,該頁面讀取 xml 文件並在單擊按鈕后在網格視圖中返回結果。
這是我試圖搜索的 XML 文件:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
</catalog>
我有一個文本框和搜索按鈕:
<asp:TextBox ID="searchtxt" runat="server" /> <asp:Button ID="search_btn" Text="Search" runat="server" OnClick="search_btn_Click" />
...網格視圖:
<div>
<asp:GridView ID="gvSearch" runat="server" EmptyDataText="No Results found" Width="618px" AutoGenerateColumns="false" CssClass="gridviewsearch" GridLines="None">
<Columns>
<asp:TemplateField HeaderText="Keyword">
<ItemTemplate>
<%# Eval("author")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Results">
<ItemTemplate>
<%# Eval("title")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="URL">
<ItemTemplate>
<%# Eval("genre")%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
...按鈕背后的代碼:
protected void search_btn_Click(object sender, EventArgs e)
{
//1 .create a reference of XDocument
XDocument xdoc = XDocument.Load("database\\books.xml");
xdoc.Descendants("book").Select(p => new
{
author = p.Attribute("author").Value,
title = p.Element("title").Value,
genre = p.Attribute("genre").Value
}) .OrderBy(p => p.author).ToList().ForEach(p =>
{
gvSearch.DataSource = xdoc;
gvSearch.DataBind();
});
}
...我的問題是,如何將 id: searchtxt 實現到代碼的后端? 此外,我在完成任務時是否走在正確的道路、設置和語法上?
識別目錄descendants
並迭代書籍elements
var term = "rain";
var query = from element in document
.Descendants("catalog")
.Elements("book")
let book = new
{
id = element.Attribute("id").Value,
author = element.Element("author").Value,
title = element.Element("title").Value,
genre = element.Element("genre").Value
}
where book.author.ToLower().Contains(term)
|| book.title.ToLower().Contains(term)
|| book.genre.ToLower().Contains(term)
select book;
那會給你
id|author|title|genre
bk102|Ralls, Kim|Midnight Rain|Fantasy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.