Я хочу модифицировать XML файл и практически ничего не знать о XML, см. Следующий фрагмент. Мне был передан некоторый код с использованием linq, поэтому я пытаюсь использовать это.
<?xml version="1.0" encoding="UTF-8"?>
<RadanCompoundDocument xmlns="http://www.radan.com/ns/rcd">
<RadanAttributes>
<Group class="custom" name="Manufacturing" desc="These attributes are the manufacturing properties of the file."
ord="6">
<Attr num="119" name="Material" desc="Material." type="s" ord="1">
<Valid perm="e" max="20"/>
</Attr>
<Attr num="120" name="Thickness" desc="Thickness." type="r" ord="2">
<Valid perm="e" min="0" max="99999"/>
....
Я хочу установить значение для строки, содержащей "Attrib num =" 119 ", как показано ниже:
<Attr num="119" name="Material" desc="Material." type="s" ord="1" value="Material1">
<Valid perm="e" max="20"/>
</Attr>
Я использую следующий код в С# для поиска правильного атрибута и установки значения:
XDocument symDoc = XDocument.Load(SymFilePath);
XElement temp = symDoc.Descendants(symNameSpace + ATT_ELEMENT)
.Where(t => t.Attribute(NUM_ATTRIBUTE).Value == MATERIAL_ATT_NUMBER).FirstOrDefault();
temp.SetValue(MaterialName)
Это работает, чтобы установить значение, но затем я теряю последнюю часть моего XML ("Valid perm =" e "max =" 20 "/>"). Теперь строка атрибута 119 показана ниже:
<Attr num="119" name="Material" desc="Material." type="s" ord="1">Steel, Mild</Attr>
Поэтому мой вопрос заключается в следующем: как я могу установить это значение, не теряя последнюю часть моего XML?
Поэтому, сделав еще несколько исследований, я считаю, что я хочу просто добавить еще один атрибут к существующему элементу без потери дочернего элемента. Спасибо за ответы до сих пор, но я вводил в заблуждение по моему первоначальному вопросу, я не думаю, что они применимы к тому, что я пытаюсь сделать.
Извините за всю путаницу, первый ответ сделал то, что мне нужно было сделать в любом случае.
использование
temp.SetAttributeValue("value", MaterialName);
Если вы хотите иметь его как значение XML-элемента, вы потеряете внутренний элемент "Действительный". Вы не можете иметь как внутренний текст, так и внутренний XML-элемент.
Intead .SetValue()
попробуйте использовать .Add()
или .AddFirst()
:
temp.AddFirst(MaterialName)