在LINQ to XML中设置属性值

5

我是LINQ to XML的新手。我有两个变量onetwo,我想将这些变量的值设置为XML中的属性。

 static void Main(string[] args)
    {
        string one = "first";
        string two = "Second";

        XDocument doc = XDocument.Load(test.xml);

    }

XML

    <Root>
  <Details XIndex="One" Index="">
    <abc></abc>
  </Details>
  <Details XIndex="Two" Index="">
    <xyz></xyz>
  </Details>
</Root>

现在请告诉我如何在详细节点中设置“Index”属性中的“One”和“Two”变量值。

示例 - 我想要以下输出结果。

<Root>
  <Details XIndex="One" Index="First">
    <abc></abc>
  </Details>
  <Details XIndex="Two" Index="Second">
    <xyz></xyz>
  </Details>
</Root>

请告诉我。

提前感谢。

3个回答

7
你可以使用 XElement.SetAttributeValue() 方法:
var element = doc.Elements("Details")
                 .Single(x=>x.Attribute("XIndex").Value=="One");

element.SetAttributeValue("Index", "First");

变量 element = doc.Root.Elements("Details");foreach (XElement ele in element) { if (ele.Attribute("XIndex").Value == "One") { ele.Attribute("Index").Value = one; } else if (ele.Attribute("XIndex").Value == "Two") { ele.Attribute("Index").Value = two; } } - Mohit Kumar

3
如果您需要经常调用此方法,最好将其放入助手方法中,例如:

如果你要经常进行这个调用,你可以把它放在一个帮助方法中,例如:

private static void SetValueToDetailElement(XDocument doc, string xIndex, string value)
{
  var detail = doc.Elements("Details").SingleOrDefault(x=>x.Attribute("XIndex").Value==xIndex);
  if(detail != null)
     detail.SetAttributeValue("Index", value);
}

然后在您的主要代码中调用以下内容。

SetValueToDetailElement(doc, "One", "First");
SetValueToDetailElement(doc, "Two", "Second");

0
这些人提供的答案为什么不会写入XML呢?没有任何异常,一切看起来都很好,除了它不会写入文件。
这是我的代码。
string file = "c:/message.xml";
XDocument d = XDocument.Load(file);

SetValueToIdElement(d, id, value);

private static void SetValueToIdElement(XDocument doc, string Id, string value)
        {
            var detail = doc.Elements("context").SingleOrDefault(x => x.Attribute("id").Value == Id);
            if (detail != null)
                detail.SetAttributeValue("value", value);
        }

基本上它和上面一样


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接