используя C # linq для написания XML

1

Я хочу модифицировать 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?

Поэтому, сделав еще несколько исследований, я считаю, что я хочу просто добавить еще один атрибут к существующему элементу без потери дочернего элемента. Спасибо за ответы до сих пор, но я вводил в заблуждение по моему первоначальному вопросу, я не думаю, что они применимы к тому, что я пытаюсь сделать.

Извините за всю путаницу, первый ответ сделал то, что мне нужно было сделать в любом случае.

  • 0
    Можете ли вы изменить ожидаемый формат вашего XML? Обычно вы хотите, чтобы каждый элемент содержал либо элементы, либо текст, но не их комбинацию.
  • 0
    Вы устанавливаете значение для <Attr num = "119" name = "Material" desc = "Material." type = "s" ord = "1"> </ Attr> Это все, что находится между открывающим и закрывающим тегом. Как вы хотите, чтобы XML выглядел, когда вы закончите?
Показать ещё 1 комментарий
Теги:
linq

2 ответа

1

использование

temp.SetAttributeValue("value", MaterialName);

Если вы хотите иметь его как значение XML-элемента, вы потеряете внутренний элемент "Действительный". Вы не можете иметь как внутренний текст, так и внутренний XML-элемент.

  • 0
    Спасибо, это то, что мне было нужно.
0

Intead .SetValue() попробуйте использовать .Add() или .AddFirst():

temp.AddFirst(MaterialName)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню