将LINQ中的Attribute值设置为XML

时间:2011-08-31 17:46:43

标签: xml linq linq-to-xml

我是LINQ to XML的新手。我有两个变量一个两个,我想在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属性中设置一个和两个变量值。

示例 - 我想要低于输出。

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

请告诉我。

提前致谢。

3 个答案:

答案 0 :(得分:5)

您可以使用XElement.SetAttributeValue()方法:

var element = doc.Elements("Details")
                 .Single(x=>x.Attribute("XIndex").Value=="One");

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

答案 1 :(得分:2)

如果你经常打这个电话,你可以把它放到辅助方法中,例如:

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");

答案 2 :(得分: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);
        }

基本上与上述相同