2013-05-18 2 views
0

XMLПолучение XML элементов по идентификатору в C#

<?xml version="1.0" encoding="utf-8" ?> 
<animals> 
    <animal id="fisrt"> 
     <type>Dog</type> 
     <name>Han</name> 
    </animal> 
    <animal id="second"> 
     <type>Cat</type> 
     <name>Leia</name> 
    </animal> 
</animals> 

C#

using System.Xml.Linq; 

string id = "second"; 
var filter = from ab in element.Elements("animal") where ab.Attribute("id").Equals(id) select ab; 
foreach (XElement selector in filter) 
{ 
    label1.Content = selector.Element("name").Value; 
} 

Что мне нужна помощь в выборе элементов на основе идентификатора родительского элемента. Цель состоит в том, чтобы выбрать имя, у которого родительский идентификатор «второй», поэтому я пытаюсь получить «Лею». Проблема, с которой я сталкиваюсь, заключается в том, что с этикеткой ничего не происходит.

Что я делаю неправильно и как я могу исправить эту проблему. Я также открыт для разных подходов, если кто-то знает о лучшем способе достижения моей цели.

+1

'ab.Attribute (" id "). Value.Equals (id)' - это то, что вы ищете. –

ответ

0

Вы пропустите, чтобы проверить значение атрибута:

where ab.Attribute("id").Value.Equals(id) 

Надежда эта помощь!

+0

Вот и все. Огромное спасибо T-moty. – user2395842

-1

Как об этом:

string name = xdoc.Elements("animal") 
    .Where (e=>e.Attribute("id")=="first") 
    .Elements("name") 
    .Select(e=>e.Value) 
    .FirstOrDefault(); 

По сути вы хотите поставить условие о id атрибута внутри where и продолжить запрос.

Я знаю, что это аннотация метода вместо синтаксиса linq, я предпочитаю, чтобы его было легче читать, когда все становится волосатым.