替换c#中的xml元素值

时间:2015-04-02 09:53:24

标签: c# xml xml-parsing linq-to-entities xmldocument

这是我的xml文件数据

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

我想在所有地方将“john”替换为“danny”。

我怎样才能在c#中做到这一点?

1 个答案:

答案 0 :(得分:2)

使用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。