Вы можете сделать что-то вроде этого:
foreach (var location in list)
{
var elem = xDocument.Root.Elements()
.Single(e => (int)e.Element("CId") == location.CId);
elem.Element("Long").ReplaceNodes(location.Long);
elem.Element("Lat").ReplaceNodes(location.Lat);
}
Затем вы можете сохранить измененный xDocument
обратно в файл или что-то еще.
Если вы обнаружите, что это недостаточно эффективно, есть несколько способов ускорить процесс. Например, создайте Dictionary
элементов с помощью CId
, чтобы не выполнять поиск по всему документу каждый раз.
Но если у вас огромные файлы, загрузка их целиком в память может оказаться невозможной или хорошей идеей. Использование XmlReader
и XmlWriter
подойдет для файлов любого размера, но их не так просто использовать.
Другой вариант, который следует учитывать, - это сериализация XML. Это сделано специально для преобразования XML в ваши объекты и обратно.
Кроме того, код, который вы имеете, может быть значительно упрощен, и в процессе он будет сделан быстрее:
xDocument.Root.Elements("CLocation")
.Select(c => new Location
{
CId = (int)c.Element("CId"),
Lat = (double)c.Element("Lat"),
Long = (double)c.Element("Long"),
Status = (Status)Enum.Parse(typeof(Status), c.Element("Status").Value)
})