2015-04-02 1 views
0

Вот мои данные файла XMLЗамена значения элемента XML в C#

<Persons> 
    <Person> 
     <Name>john</Name> 
    </Person> 
    <Employee> 
     <Detail> 
      <Firstname>john</FirstName> 
     </Detail> 
    </Employee> 
    <Student> 
     <FullName>john</FullName> 
    </Student> 
</Persons> 

Я хочу, чтобы заменить «Джон» в «Денни» во всех местах.

Как это сделать в C#?

ответ

1

Один из возможных способов использования XDocument:

var doc = XDocument.Load("path_to_xml_file.xml"); 

//select all leaf elements having value equals "john" 
var elementsToUpdate = doc.Descendants() 
          .Where(o => o.Value == "john" && !o.HasElements); 

//update elements value 
foreach(XElement element in elementsToUpdate) 
{ 
    element.Value = "danny"; 
} 

//save the XML back as file 
doc.Save("path_to_xml_file.xml"); 

Обратите внимание, что XElement.Value содержит все текстовые узлы внутри элемента, сцепляются.

Значение этого, например, учитывая ваш XML как входной сигнал, не только <Name> имеет значение «john», но также и <Person>. Но мы хотим только обновить элементы листа, а не предки.

*) Я предположил, что вы на самом деле не имел в виду, чтобы пометить вопрос по так этот ответ, используя новую XML API XDocument, хотя с помощью XmlDocument также возможно.