使用 C# 在 XML 中的特定位置追加

Appending at specific place in XML with c#

我有一个 XML 这样的文件

<?xml version="1.0" encoding="utf-8"?>
<MY_COMPUTER>
    <HARDWARE uid="" update="" functions=""  />
    <SOFTWARE>
        <GAMES uid="" update="" functions=""  url="">
            <GAME1 Game1-Attribute1="" />
            <GAME2 Game2-Attribute1="" Game2-Attribute2="" Game2-Attribute3="" Game2-Attribute4="" />
            <GAME3 Game3-Attribute1="" Game3-Attribute2="" Game3-Attribute3=""/>
            <GAME4 Game4-Attribute1="" Game4-Attribute2=""/>
        </GAMES>
    </SOFTWARE>
</MY_COMPUTER>

我正在尝试将新的软件类型添加到此 xml 文件中,例如浏览器,浏览器将与游戏相同,它将具有浏览器 1、浏览器 2,并且一些浏览器将具有属性。我用过这个

string filePath = "test.xml";

            XElement root = XElement.Load(filePath, LoadOptions.PreserveWhitespace);
 root.Add(
                        new XElement("BROWSER",
                        new XAttribute("uid",""), new XAttribute("update", ""),
                            new XElement("BROWSER2"),
                            new XElement("BROWSER3"),
                            new XElement("BROWSER4"), 
                            )
                            );

root.Save(filePath, SaveOptions.DisableFormatting);

但是有了这个代码,它在软件下附加了这个,我知道我可能犯了一个非常大的初学者错误,但我无法修复它,有人可以帮助我吗?我也在 Whosebug 上查了很多关于这个的问题,但我仍然无法解决。人们说有很多方法,比如使用 LINQ 或 stream 我不知道该使用哪个,但这个文件不会很大,所以我只需要一种可行的方法 谢谢

在软件元素之后添加这个 xml 的原因是您将它添加到 root 元素本身 (root.Add)。

如果你想将它添加到软件元素中,你应该相应地修改你的代码。

找到所需的元素并改为调用其 Add 方法。

var softwareElement = root.Descendants("SOFTWARE").First();

softwareElement.Add(
    new XElement("BROWSER",
        new XAttribute("uid", ""), new XAttribute("update", ""),
        new XElement("BROWSER2"),
        new XElement("BROWSER3"),
        new XElement("BROWSER4")
    )
);

然后像以前一样保存所有 xml。

root.Save(filePath, SaveOptions.DisableFormatting);