所以这是我的情况.
我有一个XElement,让我们称之为root,它有后代,有后代等.我使用LINQ to XML拉出一个后代,使用.ToString()将其加载到备忘录编辑器中并进行编辑.现在我想用编辑后的版本更新/替换原始的后代元素.
让我提一下,这是一个简单的XML文件,没有架构,没有使用DOM等.我只需要能够编辑和更新/替换元素.
这是我的XML的模型:
<Root> <Genre Name="Rock"> <Artist Name="Pink Floyd"> <BandMembers> <Member>Nick Mason</Member> <Member>Syd Barret</Member> <Member>David Gilmour</Member> <Member>Roger Water</Member> <Member>Richard Wright</Member> </BandMembers> <Category>Favorite band of all time</Category> </Artist> <Artist Name="Led Zepelin"> <Category>Love the band</Category> </Artist> </Genre> <Genre Name="Blues"> <Artist Name="Muddy Waters"> <Instrument>Harmonica</Instrument> </Artist> <Artist Name="Howling Wolf"> <Instrument>Guitar</Instrument> </Artist> </Genre> </Root>
现在说我要编辑“Pink Floyd”元素来纠正Roger Waters的姓氏.我获取该元素,将其转换为字符串,将其加载到我的编辑器中,进行我想要的更改,然后使用.Parse()将其转换回XElement.
现在,如何在原始XML中更新/替换“Pink Floyd”节点?
你可以使用
原文链接:https://www.f2er.com/xml/292054.htmlXNode.ReplaceWith
method:
// input would be your edited XML,this is just sample data to illustrate string input = @"<Artist Name=""Pink Floyd""> <BandMembers> <Member>Nick Mason</Member> <Member>Syd Barret</Member> <Member>David Gilmour</Member> <Member>Roger Waters</Member> <Member>Richard Wright</Member> </BandMembers> <Category>Favorite band of all time</Category> </Artist>"; var replacement = XElement.Parse(input); var pinkFloyd = xml.Elements("Genre") .Where(e => e.Attribute("Name").Value == "Rock") .Elements("Artist") .Single(e => e.Attribute("Name").Value == "Pink Floyd"); pinkFloyd.ReplaceWith(replacement); Console.WriteLine(xml);
您应该添加一些错误检查.我使用Single因为我确定节点存在,但如果有可能不存在,你应该使用SingleOrDefault并在使用结果之前检查null.
此外,如果输入无效,则需要将上述代码包装在try / catch中并处理可能抛出的任何XmlException.