编辑xml文件内多个节点的相同属性

本文关键字:属性 节点 xml 文件 编辑 | 更新日期: 2023-09-27 18:04:01

我有一个这样的xml文件:

<Atletas>
<Atleta Id="0" Nombre="Eduardo"/>
<Atleta Id="1" Nombre="Daniel" />
<Atleta Id="2" Nombre="Carlos" />
<Atleta Id="3" Nombre="Gabriel" />
<Atleta Id="4" Nombre="Pedro"/>
<Atleta Id="5" Nombre="Juan"/>
</Atletas>

删除一些节点后:

       XDocument doc = XDocument.Load(spath);
        try
        {
            var resultQuery = doc.Element("Atletas")
                   .Elements("Atleta")
                   .Where(x => (int?)x.Attribute("Id") == Convert.ToInt32(dGridTest.SelectedIndex.ToString()));
            if (resultQuery != null)
            {
                resultQuery.Remove();    
            }
            doc.Save(spath);

我得到这样的结果:

<Atletas>
<Atleta Id="0" Nombre="Eduardo"/>
<Atleta Id="1" Nombre="Daniel" />
<Atleta Id="4" Nombre="Pedro"/>
<Atleta Id="5" Nombre="Juan"/>
</Atletas>

问题是,我如何编辑Id=4和Id=5的值,以便有这个xml:

<Atletas>
<Atleta Id="0" Nombre="Eduardo"/>
<Atleta Id="1" Nombre="Daniel" />
<Atleta Id="2" Nombre="Pedro"/>
<Atleta Id="3" Nombre="Juan"/>
</Atletas>

我用的是linq和wpf

编辑xml文件内多个节点的相同属性

您可以获得属性(在您删除元素之后),然后使用XAttribute.SetValue方法

var attributes = doc.Element("Atletas")
                 .Elements("Atleta")
                 .Select(x => x.Attribute("Id"));
int i = 0;
foreach(var attr in attributes)
       attr.SetValue(i++);
doc.Save(spath);