Wel*_*.59 7 xml visual-studio-2010 c#-4.0
所以这是我的情况.
我有一个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>
Run Code Online (Sandbox Code Playgroud)
现在说我要编辑"Pink Floyd"元素来纠正Roger Waters的姓氏.我获取该元素,将其转换为字符串,将其加载到我的编辑器中,进行我想要的更改,然后使用它将其转换回XElement .Parse().
现在,如何在原始XML中更新/替换"Pink Floyd"节点?
Ahm*_*eed 15
你可以使用这个XNode.ReplaceWith方法:
// 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);
Run Code Online (Sandbox Code Playgroud)
您应该添加一些错误检查.我用过,Single因为我确定节点存在,但如果有可能不存在,你应该在使用结果之前使用SingleOrDefault并检查null.
此外,如果输入无效,则需要将上述代码包装在try/catch中并处理XmlException可能抛出的任何内容.
| 归档时间: |
|
| 查看次数: |
14066 次 |
| 最近记录: |