首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#用新的属性和子节点替换XML节点

C#用新的属性和子节点替换XML节点
EN

Stack Overflow用户
提问于 2016-02-15 22:21:55
回答 2查看 134关注 0票数 0

我得到了这个xml文件:

代码语言:javascript
复制
<?xml version="1.0"?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="MyApp.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
<startup><supportedRuntime version="v2.0.50727"/></startup>
<applicationSettings>
    <MyApp.Settings>
        ...
        ...
    </XNet.XManager.Properties.Settings>
</applicationSettings>

我需要将<startup>节点替换为:

代码语言:javascript
复制
<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>

哪种方法是最好的?

EN

回答 2

Stack Overflow用户

发布于 2016-02-15 23:02:45

如果您使用LINQ to XML (它是一个XML API,而不是LINQ):

代码语言:javascript
复制
XDocument doc = XDocument.Load("dat.xml");

XElement startup1 = doc.Root.Element("startup");
startup1.Remove();

doc.Root.Add(new XElement("startup", new XAttribute("useLegacyV2RuntimeActivationPolicy", "true"),
                               new XElement("supportedRuntime", new XAttribute("version", "v4.0"),
                               new XAttribute("sku", ".NETFramework"),
                               new XAttribute("Version", "v4.5.2"))));

doc.Save("dat.xml");

编辑-正如Jon Skeet建议的那样,正确的方法应该是使用XElement.ReplaceWith

代码语言:javascript
复制
XDocument doc = XDocument.Load("dat.xml");

XElement startup1 = doc.Root.Element("startup");           
startup1.ReplaceWith(new XElement("startup", new XAttribute("useLegacyV2RuntimeActivationPolicy", "true"),
                               new XElement("supportedRuntime", new XAttribute("version", "v4.0"),
                               new XAttribute("sku", ".NETFramework"),
                               new XAttribute("Version", "v4.5.2"))));

doc.Save("dat.xml");
票数 2
EN

Stack Overflow用户

发布于 2016-02-15 22:35:21

您可以使用下面的代码来执行相同的操作,其中查找元素并将其替换为其他元素。

代码语言:javascript
复制
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("path to your file");

string strXml = 
  @"<startup useLegacyV2RuntimeActivationPolicy='true'>
    <supportedRuntime version='v4.0' sku='.NETFramework,Version=v4.5.2' />
</startup>";
XmlDocumentFragment xmlDocFragment = xmlDoc.CreateDocumentFragment();
xmlDocFragment.InnerXml = strXml;
xmlDoc.SelectSingleNode("startup").AppendChild(xmlDocFragment);

更新:使用LINQ。正在运行的测试代码

代码语言:javascript
复制
var doc = XDocument.Load(@"path to file");
string input = @"<startup useLegacyV2RuntimeActivationPolicy='true'>
<supportedRuntime version='v4.0' sku='.NETFramework,Version=v4.5.2' />
</startup>";
var replacement = XElement.Parse(input);
var nodeToReplace = doc.Descendants().Elements("startup").FirstOrDefault();
nodeToReplace.ReplaceWith(replacement);
doc.Save(@"path to file");
Console.WriteLine(doc);
Console.Read();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35411807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档