将Xml属性添加到除根节点之外的所有元素

Web*_*rix 3 c# xml parsing xml-parsing output

我试图在c#中为我的xml文件添加新属性.我的xml文件格式如下所示:

<Root MessageOfRoot="Welcome to Xml">
    <Header Size="36">
        <Parameter Name="ID" Index="0" Value="23" />
        <Parameter Name="Name" Index="4" Value="Uncle Bob" />
        <Parameter Name="Number" Index="8" Value="4" />
    </Header>
    <Body Size="0">
        <Parameter Index="0" UnitNumber="0" Name="UnitBarcode" Type="Integer" />
        <Parameter Index="4" PromotionId="0" Name="PromotionalUnit" Type="Integer" />
    </Body>
</Root>
Run Code Online (Sandbox Code Playgroud)

我想添加新属性我的xml文件应该是这样的:

<Root MessageOfRoot="Welcome to Xml">
    <Header Size="36" NewAttr="1">
        <Parameter Name="ID" Index="0" Value="23" NewAttr="1"/>
        <Parameter Name="Name" Index="4" Value="Uncle Bob" NewAttr="1"/>
        <Parameter Name="Number" Index="8" Value="4" NewAttr="1"/>
    </Header>
    <Body Size="0" NewAttr="1">
        <Parameter Index="0" UnitNumber="0" Name="UnitBarcode" Type="Integer" NewAttr="1"/>
        <Parameter Index="4" PromotionId="0" Name="PromotionalUnit" Type="Integer" NewAttr="1"/>
    </Body>
</Root>
Run Code Online (Sandbox Code Playgroud)

为此,我编写以下代码,但我遇到了将newAttr添加到所有节点的问题.如何将NewAttr添加到我的新xml文件中?

XmlDocument doc = new XmlDocument();
doc.Load("Path of xml");
XmlAttribute NewAttr = doc.CreateAttribute("NewAttr ");
countAttr.Value = "1";
XmlWriter writer = XmlWriter.Create("output.xml", settings);
Run Code Online (Sandbox Code Playgroud)

Gio*_*sos 5

您可以使用以下命令加载XML文件:

XDocument doc = XDocument.Load(@"C:\Users\myUser\myFile.xml");
Run Code Online (Sandbox Code Playgroud)

然后,您可以调用一个函数,该函数以递归方式从Root元素的子节点开始访问XML的所有节点:

AddNewAttribute(doc.Root.Elements());
Run Code Online (Sandbox Code Playgroud)

功能可以是这样的:

public static void AddNewAttribute(IEnumerable<XElement> elements)
{
    foreach (XElement elm in elements)
    {
        elm.Add(new XAttribute("newAttr", 1));
        AddNewAttribute(elm.Elements());
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,您可以使用以下命令将XML保存回原始文件:

doc.Save(@"C:\Users\myUser\myFile.xml");
Run Code Online (Sandbox Code Playgroud)