2013-09-05 3 views
0

У меня есть файл XML следующим образом: -таргетинга XML узла, чтобы изменить значение

<Root> 
    <Player> 
     <name>Name</name> 
     <surname>Surname</surname> 
     <rating>10</rating> 
    </Player> 
    <Player> 
     <name>Name1</name> 
     <surname>Surname1</surname> 
     <rating>20</rating> 
    </Player> 
</Root> 

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

У меня есть следующий код: -

   XElement playerXML = 
       doc.Root.Elements("Player").FirstOrDefault(x => x.Element("name").ToString() == playerInput.name 
                   && x.Element("surname").ToString() == playerInput.surname 
                   && Convert.ToInt32(x.Element("rating")) == playerInput.rating); 
      if (playerXML != null) 
      { 
       //do processing 
      } 

Однако я ничего не получаю обратно, даже если имя, фамилия и рейтинг в файле.

Что я делаю неправильно?

Спасибо за вашу помощь

+0

Не может быть проблемой, но есть ли у вас какие-либо причины использовать 'ToString()' вместо 'Value' или [casting] (http://msdn.microsoft.com/en-us/ library/bb348319.aspx) (например, '(int) (x.Element (" rating ")))? –

ответ

2

Проблема заключается в том, что XElement/XNode.ToStringвозвращает XML в том числе элементов тегов.

Вместо этого используйте XElement.Value, чтобы «[получить] содержимое конкатенированного текста этого элемента».

+0

спасибо, что была проблема! – Johann

1

Необходимо использовать XElement.Value Имущество вместо вызова метода ToString().

doc.Root.Elements("Player").FirstOrDefault(x => x.Element("name").Value == playerInput.name 
                   && x.Element("surname").Value == playerInput.surname 
                   && Convert.ToInt32(x.Element("rating").Value) == playerInput.rating); 
Смежные вопросы