2014-12-25 4 views
0

// Предположим, что у меня есть следующий XML-файл.LINQ complex delete and search query

<warehouse> 
      <cat id="computer"> 
      <item> 
       <SN>1</SN> 
       <name>Toshiba</name> 
       <quantity>12</quantity> 
       <description>CPU: CORE I5 RAM: 3 GB HD: 512 GB</description> 
       <price>400 USD</price> 
      </item> 
<item> 
       <SN>22</SN> 
       <name>Toshiba</name> 
       <quantity>12</quantity> 
       <description>CPU: CORE I5 RAM: 3 GB HD: 512 GB</description> 
       <price>400 USD</price> 
      </item> 
      </cat> 
      <cat id="Stationery"> 
      <item> 
       <SN> 33 </SN> 
       <name>note books</name> 
       <quantity>250</quantity> 
       <description>Caterpiller</description> 
       <price>5 USD</price> 
      </item> 
     </cat> 
     <cat id="Furniture"> 
      <item> 
       <SN> 1 </SN> 
       <name>dasd</name> 
       <quantity>asdasd</quantity> 
       <description>das</description> 
       <price>dasd</price> 
      </item> 
<item> 
       <SN>44</SN> 
       <name>Toshiba</name> 
       <quantity>12</quantity> 
       <description>CPU: CORE I5 RAM: 3 GB HD: 512 GB</description> 
       <price>400 USD</price> 
      </item> 

      <item> 
     </cat> 
     </warehouse> 

вопрос 1: Я хочу удалить <item> элемент и с помощью LINQ своего ребенка, где <cat id="computer"> и <SN> имеет определенное значение, как 44.

вопрос 2: Я хочу сделать запрос, используя TextBox и Literal1, которые возвращают спецификацию <item> и ее дочерние элементы. этот запрос должен быть в linq.

, например

XDocument xmlDoc = XDocument.Load(Server.MapPath("/XML/Cat1.xml")); 
     var persons = from person in xmlDoc.Descendants("item") 
         where person.Element("SN").Value.Equals(DropDownList1.Text) 
         select person; 


     persons.Remove(); 


     foreach (XElement person in persons.ToList()) 
     { 
      person.Remove(); 

     } 
+0

я хочу что-то вроде этого кода XDocument xmlDoc = XDocument.Load (Server.MapPath ("/ XML/Cat1.xml")); var person = from person in xmlDoc. Потомки ("item") где person.Element ("SN"). Value.Equals (DropDownList1.Text) выбрать человека; persons.Remove(); 0 foreach (XElement жители person.ToList()) { человек.Remove(); } –

+0

Лучше добавьте свои усилия, отредактировав свой вопрос. –

+0

Ваш запрос выглядит нормально. С какими проблемами вы сталкиваетесь? –

ответ

0

Попробуйте это: -

xmlDoc.Root.Descendants("cat").Where(x => x.Attribute("id").Value == "computer") 
     .Descendants("item").Where(x => x.Element("SN").Value.Trim() == Dropdownlist.Text) 
     .Remove(); 
xmlDoc.Save(@"YourXML.xml"); 

И для фильтрации вы можете заменить значения в определенных местах, которые вам нравятся. Кроме того, я использовал Trim напрямую, лучше проверить пустые строки сначала в вашем фактическом коде.

Вопрос 2: -

var result = xmlDoc.Descendants("item") 
      .Where(x => x.Element("SN").Value.Trim() == Dropdownlist.Text); 
+0

может у вас отредактировать это, чтобы сделать это, где SN == Dropdownlist.text ?? –

+0

@ RefaatKh - Plz check nw. –

+0

Большое вам спасибо. а как насчет вопроса 2 ?? У вас есть какое-то решение? –

0

Что касается вопроса один я хотел бы сделать что-то вроде этого, используя синтаксис метода:

doc.Descendants("cat") 
     .Where(x => String.Equals((string)x.Attribute("id"), "computer", StringComparison.OrdinalIgnoreCase)) 
     .Elements("item") 
     .Where(x => (string)x.Element("SN") == "44") 
     .Remove(); 

В основном выбрать все элементы кошачьи и фильтр по атрибуту ID = компьютер. Затем выберите все элементы в каждой из них и процеживают через SN = 44.

+0

Могу ли вы, пожалуйста, отредактировать это, чтобы сделать его там, где SN == Dropdownlist.text ?? –