Невозможно получить узел XML из XElement - PullRequest
0 голосов
/ 16 декабря 2011

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

Считайте, что это 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();

Но если я изменю предложение where на «Last», оно вернет ноль элементов.

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();

Пожалуйста, помогите. Я действительно застрял.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

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

0 голосов
/ 16 декабря 2011

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

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