2012-03-09 2 views
1

У меня похожая ситуация, как например hereКак получить InnerXml значения атрибутов с помощью XML читателя

Как извлечь «Цена» и «Title» ценности книги с данной ISBN?

+0

почему ты ребята голосуют за закрытие? ... Я пробовал это с утра ... – Relativity

+0

всегда полезно добавить более подробную информацию и включить код, который уже пробовал. – halfer

ответ

4

Вот пример:

class Program 
{ 
    static void Main() 
    { 
     var xml = 
     @" 
     <bookstore> 
      <book genre='novel' ISBN='10-861003-324'> 
      <title>The Handmaid's Tale</title> 
      <price>19.95</price> 
      </book> 
      <book genre='novel' ISBN='1-861001-57-5'> 
      <title>Pride And Prejudice</title> 
      <price>24.95</price> 
      </book> 
     </bookstore> 
     "; 
     using (var reader = new StringReader(xml)) 
     using (var xmlReader = XmlReader.Create(reader)) 
     { 
      var bookFound = false; 
      while (xmlReader.Read()) 
      { 
       if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "book") 
       { 
        var isbn = xmlReader.GetAttribute("ISBN"); 
        bookFound = isbn == "1-861001-57-5"; 
       } 

       if (bookFound && xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "title") 
       { 
        Console.WriteLine("title: {0}", xmlReader.ReadElementContentAsString()); 
       } 
       if (bookFound && xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "price") 
       { 
        Console.WriteLine("price: {0}", xmlReader.ReadElementContentAsString()); 
       } 
      } 
     } 
    } 
} 

и если XML-файл, который вы читаете, не очень большой и может поместиться в памяти можно использовать XDocument разобрать его:

var doc = XDocument.Parse(xml); 
var result = 
    (from book in doc.Descendants("book") 
    where book.Attribute("ISBN").Value == "1-861001-57-5" 
    select new 
    { 
     Title = book.Element("title").Value, 
     Price = book.Element("price").Value 
    }).FirstOrDefault(); 
if (result != null) 
{ 
    Console.WriteLine("title: {0}, price: {1}", result.Title, result.Price); 
} 
+0

Итак, цена и название не являются атрибутом элемента книги? Тогда как я могу получить pricie и название определенного элемента? – Relativity

+0

@ Релятивность, что вы подразумеваете под «конкретным элементом»? Как цена и название книги с данным ISBN? –

+0

да, как мы можем получить цену и название книги с конкретным ISBN? – Relativity

Смежные вопросы