使用XElement更改Xml值(使用指定的Attributes)

时间:2014-06-10 11:23:45

标签: c# xml xelement

<?xml version="1.0" encoding="utf-8"?>
<Instances>
  <InstanceInfos Name="i-82c61ac1">
    <MaxTime>38</MaxTime>
  </InstanceInfos>
  <InstanceInfos Name="i-83c61ac0">
    <MaxTime>447</MaxTime>
  </InstanceInfos>
</Instances>

您好, 我正在寻找一种通过指定属性来编辑Xelement指定值的方法(例如:i-82c61ac1)。

(实际上我知道如何加载xml文件并添加元素,但是我因为Attributs指定的编辑值而陷入困境。)

例如,我想编辑<MaxTime>38</MaxTime>但仅限于<InstanceInfos Name="i-82c61ac1">

感谢您的帮助,

最好的问候。

2 个答案:

答案 0 :(得分:1)

XDocument xDoc = XDocument.Load("file.xml");

        XElement result = xDoc.Descendants("InstanceInfos")
            .Where(x => x.Attribute("Name")
                .Value == "i-82c61ac1")
            .Descendants()
            .SingleOrDefault();

        result.Value = "Foo";

        xDoc.Save("file.xml");

答案 1 :(得分:0)

您可以使用XDocument加载xml并使用Descendants

    private static void Main(string[] args)
    {
        var data = @"<?xml version=""1.0"" encoding=""utf-8""?>
                    <Instances>
                        <InstanceInfos Name=""i-82c61ac1"">
                            <MaxTime>38</MaxTime>
                        </InstanceInfos>
                        <InstanceInfos Name=""i-83c61ac0"">
                            <MaxTime>447</MaxTime>
                       </InstanceInfos>
                    </Instances>";
        var document = XDocument.Parse(data);
        const string attributeId = "i-82c61ac1";
        var element = document.Descendants("InstanceInfos").FirstOrDefault(p => p.Attribute("Name").Value.Equals(attributeId));
        if (element != null)
        {
            var maxTime = element.Elements("MaxTime").FirstOrDefault();
            if (maxTime != null) maxTime.Value = "100";
        }
        document.Save("FinalResult.xml");
    }