2012-03-21 76 views
0

我是新来的XML在.net中,我有这个需求,我需要在XML文件中搜索。例如,我有这个XML文件。使用.net查询XML(需要帮助)

<?xml version="1.0" encoding="utf-8"?> 
<Books> 
    <Book> 
    <Title>Sample book1</Title> 
    </Book> 
    <Book> 
    <Title>Sample book2</Title> 
    </Book> 
    <Book> 
<Title>Another book</Title> 

再举例来说,我用的是“样品”作为搜索键,以便输出将样品BOOK1和样品第二册。如果我使用“book”作为搜索关键字,输出将是Sample book1,Sample book2和另一本书。

从我现在所拥有的基础来看,这似乎是不可能的。

  Dim xmlDocument As New XmlDocument() 
     Dim _xmlDataSource As New XmlDataSource 

     xmlDocument.Load(Server.MapPath("XML/Books.xml")) 

     Dim node = xmlDocument.DocumentElement.SelectSingleNode("./Books/Book[@title='SearchKey']") 

这是可能的.net?如果我的XML文件格式正确,您是否也可以查看要求?

在此先感谢

回答

1

我可以告诉你的例子(你可以使用LINQ问题)这是我的旧项目:

VAR账单从damskie =在billingData.Element( “ubrania”)元素( “damska”)。元素(“pm”)。后代(“item”) select new dane_xml_panel((int)damskie.Element(“id”));

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 
using System.Xml.Linq; 

namespace sklep_internetowy_MVC.Models 
{ 
    public class pobierane_dane_xml 
    { 
     private List<dane_xml_panel> allBillings; 
     private XDocument billingData; 

     // constructor 
     public pobierane_dane_xml() 
     { 

       allBillings = new List<dane_xml_panel>(); 

       billingData = XDocument.Load(HttpContext.Current.Server.MapPath("~/App_Data/dane.xml")); 
       var billings = from damskie in billingData.Element("ubrania").Element("damska").Element("pm").Descendants("item") 
           select new dane_xml_panel((int)damskie.Element("id")); 
       allBillings.AddRange(billings.ToList<dane_xml_panel>()); 

     } 

     // return a list of all billings 
     public IEnumerable<dane_xml_panel> GetBillings() 
     { 
       return allBillings; 
     } 


     public dane_xml_panel GetBillingByID(int id) 
     { 
       return allBillings.Find(item => item.ID == id); 
     } 

     // Insert Record 
     public void InsertBilling(dane_xml_panel billing) 
     { 
       billing.ID = (int)(from b in billingData.Descendants("item") orderby (int)b.Element("id") descending select (int)b.Element("id")).FirstOrDefault() + 1; 

       billingData.Root.Add(new XElement("item", new XElement("id", billing.ID))); 

       billingData.Save(HttpContext.Current.Server.MapPath("~/App_Data/dane.xml")); 
     } 

     // Delete Record 
     public void DeleteBilling(int id) 
     { 
       billingData.Root.Elements("item").Where(i => (int)i.Element("id") == id).Remove(); 

       billingData.Save(HttpContext.Current.Server.MapPath("~/App_Data/dane.xml")); 
     } 

     // Edit Record 
     public void EditBilling(dane_xml_panel billing) 
     { 
      XElement node = billingData.Root.Elements("item").Where(i => (int)i.Element("id") == billing.ID).FirstOrDefault(); 


      billingData.Save(HttpContext.Current.Server.MapPath("~/App_Data/dane.xml")); 
     } 
    } 
} 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 


namespace sklep_internetowy_MVC.Models 
{ 
    public class dane_xml_panel 
    { 
      public dane_xml_panel() 
     { 
      this.ID = 0; 

     } 

      public dane_xml_panel(int id) 
      { 
       this.ID = id; 
      } 

     public int ID { get; set; } 

    } 
} 

,在这里你有XML文件(丹麦XML):

<?xml version="1.0" encoding="utf-8"?> 
<ubrania> 
    <damska> 
     <nk id="Nowa Kolekcja"> 

      <item> 
        <id>1</id> 

      </item> 
      <item> 
        <id>2</id> 

      </item> 

     </nk> 
     <pm id="Nowosci"> 

      <item> 
        <id>3</id> 

      </item> 
      <item> 
        <id>4</id> 

      </item> 

     </pm> 

    </damska> 


</ubrania>