2013-04-18 2 views
-3

У меня есть формат XML, как это ..XML загрузка с конкретным фильтром

<ROOT> 
    <bookstore> 
     <Name>XXXXXX</BUNIT> 
    </bookstore> 
    <book> 
     <ID>000000000000001001</ID> 
     <title>Everyday Italian</title> 
     <author>Giada De Laurentiis</author> 
     <year>2005</year> 
     <price>30.00</price>   
    </book> 
    <book> 
     <ID>000000000000001002</ID> 
     <title>Everyday Italian</title> 
     <author>Giada De Laurentiis</author> 
     <year>2005</year> 
     <price>30.00</price>   
    </book> 
    <book> 
     <ID>000000000000001003</ID> 
     <title>Everyday Italian</title> 
     <author>Giada De Laurentiis</author> 
     <year>2005</year> 
     <price>30.00</price>   
    </book> 
    <book> 
     <ID>000000000000001004</ID> 
     <title>Everyday Italian</title> 
     <author>Giada De Laurentiis</author> 
     <year>2005</year> 
     <price>30.00</price>   
    </book> 
</ROOT> 

Теперь я хочу, чтобы загрузить только один узел книги с «ID» без цикла. я попробовал некоторое это так .. мы получим полный узел книги (первый идентификатор пункта = 000000000000001001) с ниже линиями

_nodeList = objxml.SelectSingleNode("//book/") 

но я дам ID для фильтрации, как показано ниже коды.

_nodeList = objxml.SelectSingleNode("//book/ID['000000000000001001']") 

и мне нужен полный книжный узел с этим конкретным идентификатором.

+1

У вас есть ошибка в XML, вы не закрываете '' и whats ''? – DGibbs

+0

Это ' XXXXXX' является проблемой. – Neolisk

ответ

4

Если я правильно понял вопрос, вы хотите выбрать элемент книги дочерним элементом ID значение?

Если это так, вы можете использовать очень простой запрос LINQ, чтобы вернуть книгу узел по идентификатору (предполагается, что вы исправили свой XML первый):

var book = from n in xml.Descendants("ROOT").Elements("book") 
         where n.Element("ID").Value == "000000000000001001" 
         select n; 

Затем можно спроецировать значения анонимных типов и отбрасывать запрос к списку перечислить результаты:

var book = (from n in xml.Descendants("ROOT").Elements("book") 
      where n.Element("ID").Value == "000000000000001001" 
      select new 
      { 
       ID = (string)n.Element("ID").Value, 
       Title = (string)n.Element("title").Value, 
       Author = (string)n.Element("author").Value, 
       Year = (string)n.Element("year").Value, 
       Price = (string)n.Element("price").Value 
      }).ToList(); 

который даст выход, такие как:

enter image description here

1
var book = onjxml.SelectSingleNode("//ROOT/book[ID='000000000000001003']") 
+0

+1 Вам не нужен ROOT, хотя с двойной косой чертой. –

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