2015-03-23 2 views
0

Я нашел эту тему и адаптировать его к моей XML-файл https://stackoverflow.com/a/18509248Изменить существующий элемент в XDocument

Мой XML код выглядит следующим образом

<body> 


    <id>1</id> 
     <disc>B</disc> 
     <type>Mark</type> 
     <value>5</value> 


    <id>2</id> 
     <disc>A</disc> 
     <type>Mark</type> 
     <value>10</value> 
    </body> 

и C# код для выбора и редактирования определенной записи выглядит

try 
      { 
       var target = doc 
       .DescendantsAndSelf("body") 
       .Where(e => e.Element("disc").Value == Disc 
        && e.Element("type").Value.ToString().Equals(Type.ToString()) 
        && e.Element("value").Value.ToString().Equals(OldMark.ToString())) 
       .Single(); 



       Debug.WriteLine(target.ToString()); 
      } 
      catch (Exception) 
      { 

       throw; 
      } 

Проблема в том, что он возвращает весь документ, и я не могу понять, почему.

Я использую XDocument и приложение предназначено для WP8.1

Можете ли вы помочь мне с этим?

Спасибо!

ответ

0

Метод DescendantsAndSelf(XName name) возвращает каждый элемент, имеющий соответствующее имя и все элементы-потомки этого элемента (MSDN). В вашем случае это body элемент со своими детьми.

Вы, вероятно, хотите, чтобы сформировать свой XML как следующий:

<?xml version="1.0" encoding="UTF-8"?> 
<body> 
    <someElement> 
     <id>1</id> 
     <disc>B</disc> 
     <type>Mark</type> 
     <value>5</value> 
    </someElement> 
    <someElement> 
     <id>2</id> 
     <disc>A</disc> 
     <type>Mark</type> 
     <value>10</value> 
    </someElement> 
</body> 

так что вы можете получить один узел someElement XML, как это:

var target = doc.DescendantsAndSelf("someElement") 
       .Where(e => e.Element("disc").Value == Disc 
        && e.Element("type").Value.ToString().Equals(Type.ToString()) 
        && e.Element("value").Value.ToString().Equals(OldMark.ToString())) 
       .Single(); 

Debug.WriteLine(target.ToString()); 
Смежные вопросы