You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向现有XML文档添加多个带自定义属性的同名<app>节点?

解决XML中添加多个同名节点的问题

嘿,看来你在给现有XML添加节点的时候踩坑啦!你之前的代码问题出在错误使用了XmlElement的构造方式——那个构造函数根本不能直接传完整的XML字符串来创建节点,而且你还混用了LINQ to XML(XDocument)和传统的System.Xml API,这就更容易出问题了。下面给你两种靠谱的解决办法,推荐用第一种,更简洁直观~

方法一:用LINQ to XML(推荐,和你一开始的XDocument适配)

因为你一开始就用了XDocument,那咱们就顺着这个体系来,LINQ to XML的API写起来更清爽:

  1. 先加载你的现有XML文档
    不管是从文件加载还是从字符串加载,都很简单:

    // 从文件加载
    XDocument doc = XDocument.Load("你的XML文件路径.xml");
    
    // 如果是从字符串加载的话,用这个
    // string xmlContent = "<body><setting>...</setting></body>";
    // XDocument doc = XDocument.Parse(xmlContent);
    
  2. 找到节点
    咱们要把新的节点加到这个节点下面:

    XElement settingNode = doc.Root.Element("setting");
    
    // 万一找不到<setting>节点,就新建一个加上去
    if (settingNode == null)
    {
        settingNode = new XElement("setting");
        doc.Root.Add(settingNode);
    }
    
  3. 创建并添加多个独立的节点
    每个节点可以自由设置自己的属性,完全不会互相覆盖:

    // 第一个新app:带owner属性
    XElement writeApp = new XElement("app",
        new XAttribute("name", "write.exe"),
        new XAttribute("folder", @"c:\windows\system32\"),
        new XAttribute("owner", "jane")
    );
    settingNode.Add(writeApp);
    
    // 第二个新app:带age属性
    XElement paintApp = new XElement("app",
        new XAttribute("name", "mspaint.exe"),
        new XAttribute("folder", @"c:\windows\system32\"),
        new XAttribute("age", "5")
    );
    settingNode.Add(paintApp);
    
    // 想加多少就加多少,每个都可以自定义属性
    
  4. 保存修改后的XML

    doc.Save("你的XML文件路径.xml");
    

方法二:用传统的System.Xml API(XmlDocument)

如果你更习惯用老的XmlDocument体系,也可以这么写:

XmlDocument doc = new XmlDocument();
doc.Load("你的XML文件路径.xml");

// 定位到<setting>节点
XmlNode settingNode = doc.SelectSingleNode("/body/setting");
if (settingNode == null)
{
    settingNode = doc.CreateElement("setting");
    doc.DocumentElement.AppendChild(settingNode);
}

// 创建第一个app节点并设置属性
XmlElement writeApp = doc.CreateElement("app");
writeApp.SetAttribute("name", "write.exe");
writeApp.SetAttribute("folder", @"c:\windows\system32\");
writeApp.SetAttribute("owner", "jane");
settingNode.AppendChild(writeApp);

// 创建第二个app节点
XmlElement paintApp = doc.CreateElement("app");
paintApp.SetAttribute("name", "mspaint.exe");
paintApp.SetAttribute("folder", @"c:\windows\system32\");
paintApp.SetAttribute("age", "5");
settingNode.AppendChild(paintApp);

// 保存
doc.Save("你的XML文件路径.xml");

为啥你原来的代码不行?

你之前写的System.Xml.XmlElement appnew = new System.Xml.XmlElement("<app name=\"write.exe\" folder=\"c:\\windows\\system32\\\">")是错误的——XmlElement的构造函数只接受节点名称,不能直接传完整的XML标签字符串。而且你同时用了XDocument和XmlElement,这两个属于不同的XML处理体系,混用容易出各种奇怪的问题,所以建议统一用其中一种~

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:38:19