2011-12-16 1 views
0

Мне действительно нужна помощь с предложением where ниже.Невозможно получить узел xml из XElement

Рассмотрим этого XML

<name xmlns="http://www.imsglobal.org/xsd/imslip_v1p0"> 
<partname> 
    <typename> 
    <tyvalue>First</tyvalue> 
    </typename> 
    <text>Charles</text> 
</partname> 
<partname> 
    <typename> 
     <tyvalue>Last</tyvalue> 
    </typename> 
    <text>Ward</text> 
    </partname> 
</name> 

Этот код возвращает один элемент

List<XElement> xElements = xmlDocument.Descendants(Aw + "name"). 
Where(x => (x.Element(Aw + "partname").Element(Aw + "typename").Element(Aw + "tyvalue")).Value == "First"). 
Select(x => x.Element(Aw + "partname").Element(Aw + "text")).ToList(); 

Но если я изменю ИНЕК "Последний", он возвращает нулевые элементы.

List<XElement> xElements = xmlDocument.Descendants(Aw + "name"). 
Where(x => (x.Element(Aw + "partname").Element(Aw + "typename").Element(Aw + "tyvalue")).Value == "Last"). 
Select(x => x.Element(Aw + "partname").Element(Aw + "text")).ToList(); 

Просьба помочь. Я действительно застрял.

ответ

0

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

List<XElement> xElements = xmlDocument.Descendants(Aw + "name") 
       .Descendants(Aw + "partname") 
       .Descendants(Aw + "typename") 
       .Descendants(Aw + "tyvalue") 
       .Where(x => x.Value == "Last") 
       .ToList(); 
+0

Спасибо за ваш ответ. Я нахожусь в метро по дороге домой, но я попробую это с первого понедельника утром. – FatAlbert

0

x.Element возвращает первый ребенок; поскольку у вас много, вам нужно будет использовать «Элементы» вместо «Элемента», после которого вы должны итерации.