我有一个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。
答案 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");