Мне нужно либо добавить пару дочерних узлов, либо обновить узел, если он уже существует. Как видно из небольшого примера ниже, у меня есть один узел с дочерними узлами, а другой - без него. Скажем, у меня есть определение, исходящее из таблицы SQL для обоих из них, я хочу добавить значение к узлу.Добавление или обновление XML-узла
XML
<workbook>
<datasources>
<column datatype='real' name='[CONTRACT_PAYMENT_AMT]' role='measure' type='quantitative'>
<desc>
<formatted-text>
<run>The amount being paid on the contract.</run>
</formatted-text>
</desc>
</column>
<column datatype='real' name='[CONTRACT_PAYMENT_DATE]' role='measure' type='quantitative'>
</column>
</datasources>
Вот код, я должен просто получить имя атрибута. Столбцы - это класс, который потенциально может содержать тип данных, имя, роль и тип.
IEnumerable<string> names = from Columns in XDocument.Load(path).Descendants("column")
select Columns.Attribute("name").Value;
foreach (string name in names)
{
}
Это было предназначено для начала метода.
У меня возникли проблемы с мыслью о том, как я могу хранить значения и обновлять XML-документ, или просто смотреть на каждый узел, возможно, и обновляться по мере его прохождения через документ. Есть идеи?
EDIT - новый код, добавляющий новое значение в текущий узел Run, но не добавляющий новый ... с определением.
var document = XDocument.Load(path);
var elements = (from column in document.Descendants("column")
select new
{
AttributeName = column.Attribute("name").Value,
Run = column.Descendants("run").FirstOrDefault() ?? new XElement("run")
}).ToList();
foreach (var item in elements)
{
if (item.Run == null) continue;
else
{
item.Run.Value = GetVariable(item.AttributeName);
// Getvariable is the method that returns the definition
}
}
document.Save(path);
Что вы хотите обновить? Атрибут или просто целый узел? – CodeNotFound
@CodeNotFound На основании атрибута name я хочу запросить таблицу значений для этого имени, а затем добавить дочерний узел (ы) desc с определением из моей таблицы. Определение будет находиться внутри<.run> –
Markpelly
Возможно ли иметь несколько элементов столбца с одинаковым значением имени атрибута? – CodeNotFound