使用.net查询XML(需要帮助)

时间:2012-03-21 09:50:01

标签: .net xml

我是.net中的xml新手,我有这个要求,我需要在xml文件中搜索。例如,我有这个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>

例如,我使用“sample”作为搜索键,因此输出将为Sample book1和Sample book2。如果我使用“book”作为搜索键,输出将是Sample book1,Sample book2和Another book。

基于我现在所拥有的,似乎不可能。

            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 个答案:

答案 0 :(得分:1)

我可以给你看例子(你可以使用linq问题)这是我的旧项目:

var billings =来自billingData.Element(“ubrania”)中的damskie。元素(“damska”)。元素(“pm”)。后代(“item”)                                选择新的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文件(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>