在XDocument中定位和设置元素值的最有效方法是什么?

给出以下XML“模板”:

  {USERNAME} {PASSWORD} {CLIENT-ID}  {SERVICE-ID}  

使用XDocument,在花括号中设置值的最佳方法是什么。 到目前为止,我已经陷入了选择元素中三个节点中每个节点的最佳方法。 这只是XML的一小部分,其他可能最多包含20个元素。

构建XML的方式不是我的创建,而是我们必须发送给供应商的“网络服务”……在任何人对格式=“计数”属性笑之前:)

@David – 为响应欢呼,赞赏。 我有点希望它有点优雅,有点像:

 List e = doc.Descendants("a").ToList(); e.Where(x => x.Attributes("name") == "username").Single().Value = "abc"; e.Where(x => x.Attributes("name") == "password").Single().Value = "abc"; 

显然,上面的代码不起作用,但我认为每个标签都会有一个优雅的衬垫

这样做适合你吗? 好旧的后裔财产。

 string xmlInput = ...; XDocument myDoc = XDocument.Parse(xmlInput); // List someElements = myDoc.Descendants("a").ToList(); someElements.ForEach(x => x.Value = "Foo"); // Console.WriteLine(myDoc); 

嗯,我看到你有一个属性。 也可以这样做:

 string xmlInput = //... XDocument myDoc = XDocument.Parse(xmlInput); // List someText = myDoc.Descendants() .Nodes() .OfType() .Where(x => x.Value.StartsWith("{") && x.Value.EndsWith("}")) .ToList(); // List someAttributes = myDoc.Descendants() .Attributes() .Where(x => x.Value.StartsWith("{") && x.Value.EndsWith("}")) .ToList(); // someText.ForEach(x => x.Value = "Foo"); someAttributes.ForEach(x => x.Value = "Bar"); // Console.WriteLine(myDoc); 

啊,现在有了你所期待的,我会让它发挥作用:

 List e = myDoc.Descendants("a").ToList(); e.Where(x => x.Attribute("name").Value == "username").Single().Value = "abc"; e.Where(x => x.Attribute("name").Value == "password").Single().Value = "abc";