Итак, у вас есть проблема, которая существует из нескольких проблем. Вы должны научиться разбивать большие проблемы на более мелкие. Вы могли бы начать с использования более дружественного XML API, потому что этот довольно запутанный. В любом случае, используя ваш код в качестве отправной точки:
// create a dictionary to hold the categories:
var categories = new Dictionary<int, string>
{
{ 2403, "Foo" },
{ 2404, "Bar" }
};
foreach(XNode node in doc.DescendantNodes())
{
if(node is XElement)
{
XElement element = (XElement)node;
if (element.Name.LocalName.Equals("category"))
{
var ids = element.Value;
// Split the comma-separated integers, parse them and store them in a list
var idList = ids.Split(',').Select(int.Parse).ToList();
// Translate the IDs to the appropriate strings
var categoryNames = idList.Select(i => categories[i]).ToList();
// Concatenate the category names into a single string again
var concatenated = string.Join(",", categories);
// And assign it to the value again
element.Value = concatenated;
}
}
Этот код не проверяет ошибки. Поэтому, если значение содержит нецелые числа, оно выдаст исключение. Если словарь не содержит записи для данного числа, он выдаст исключение. Как их решить, оставлено для вас в качестве упражнения.
Вероятно, есть проблема с разделом CDATA, см. Как редактировать текстовое содержимое, сохраняя его в блоке CDATA? .