Vincent Echavez
Vincent Echavez

Reputation: 27

Query in XML using .net (need help)

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

Answers (1)

RPD
RPD

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

Related Questions