如何读取和更新XElement中节点的值

时间:2014-01-10 17:27:02

标签: c# xml linq

我有一个xml文档(实际上是一个配置文件)加载到XDocument对象中,其中包含如下元素:

  <ScheduledTasks>
    <add key="RelativePath" value="..\Scheduler\Tasks"/>
    <add key="SearchPauseInSeconds" value="10"/>
    <add key="MatrixAccount" value="95755UE93ZEb3fRZUSZ753K9FRS3O9DaDrJxtdiiZnm"/>
    <add key="MatrixPassword" value="95755UE93ZEb3fRZUSZ753K9FRS3O9DaDgKrn2e71"/>
  </ScheduledTasks>

如何最好地检索(和更新)RelativePath,SeachPauseInseconds等的值?它们不是XElements。

TIA。

3 个答案:

答案 0 :(得分:2)

var attribute =
   xDocument.Root.Elements()
                 .Single(element => element.Attribute("key").Value == "RelativePath")
                 .Attribute("value");
string oldValue = attribute.Value;   // to retrieve
attribute.Value = newValue;          // to update

答案 1 :(得分:1)

他们是属性。使用XElement.Attribute("attributeName")获取它们。

var items = (from i in scheduledTasksElement.Elements("add")
             select new
             {
                 KeyAttribute = i.Attribute("key"),
                 Key = (string)i.Attribute("key"),
                 ValueAttribute = i.Attribute("value"),
                 Value = (string)i.Attribute("value")
             }).ToList();

正如您所看到的,您可以轻松地将XAttribute投射到其他类型,就像使用XElement一样。

您还可以更新值:

items[0].KeyAttribute.Value = "newValue";

答案 2 :(得分:0)

例如,您可以创建一个可以执行此操作的扩展方法

public static void FindAndReplace(this XDocument doc, string key, string newValue)
{
    var elem = doc.Descendants("add")
                  .FirstOrDefault(d => d.Attribute("key").Value == key);
    if (elem != null)
        elem.Attribute("value").Value = newValue;
}

并像

一样使用它
doc.FindAndReplace("RelativePath", "..\Tasks");