Reputation: 27
I'm new to xml in .net, And I have this requirements that i need to search in xml file. For example i have this xml file.
<?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>
And for example I use the word "sample" as search key so the output would be Sample book1 and Sample book2. and if I used "book" as search key, the output would be Sample book1,Sample book2 and Another book.
Base from what i have right now, it seems it's not possible.
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']")
Is this possible in .net? Can you review also if my xml file is in correct format base on the requirements.
Thanks in advance
Upvotes: 0
Views: 63
Reputation: 494
I can show you example (you can use linq questions) This is my old project:
var billings = from damskie in billingData.Element("ubrania").Element("damska").Element("pm").Descendants("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"));
}
}
}
Class
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; }
}
}
and here you have got xml file(dane 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>
Upvotes: 1