在 C# 中替换 xml 元素值
Replacing an xml element value in c#
这是我的 xml 文件数据
<Persons>
<Person>
<Name>john</Name>
</Person>
<Employee>
<Detail>
<Firstname>john</FirstName>
</Detail>
</Employee>
<Student>
<FullName>john</FullName>
</Student>
</Persons>
我想将所有地方的 "john" 替换为 "danny"。
如何在 C# 中执行此操作?
使用 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>
的值。但是我们只想更新叶元素而不是祖先元素。
*) 我假设你并不是真的想用 xmldocument 标记问题所以这个答案使用更新的 XML API XDocument
, 虽然也可以使用 XmlDocument。
这是我的 xml 文件数据
<Persons>
<Person>
<Name>john</Name>
</Person>
<Employee>
<Detail>
<Firstname>john</FirstName>
</Detail>
</Employee>
<Student>
<FullName>john</FullName>
</Student>
</Persons>
我想将所有地方的 "john" 替换为 "danny"。
如何在 C# 中执行此操作?
使用 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>
的值。但是我们只想更新叶元素而不是祖先元素。
*) 我假设你并不是真的想用 xmldocument 标记问题所以这个答案使用更新的 XML API XDocument
, 虽然也可以使用 XmlDocument。