簡體   English   中英

使用 C# LINQ 搜索 XML 文件

[英]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" /> &nbsp; <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM