Установить значение атрибута в LINQ для XML - PullRequest
3 голосов
/ 31 августа 2011

Я новичок в LINQ to XML. У меня есть две переменные one и two , и я хочу установить значения этих переменных в атрибуте в 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 ]

5 голосов
/ 31 августа 2011

Вы можете использовать метод XElement.SetAttributeValue():

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

element.SetAttributeValue("Index", "First");
2 голосов
/ 01 сентября 2011

Если вы собираетесь делать этот вызов часто, вы могли бы также поместить его в вспомогательный метод, такой как:

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 голосов
/ 07 февраля 2013

Есть ли причина, по которой ответы этих парней не пишут в 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);
        }

В основном это то же самое, что и выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...