使用C#linq编写XML

时间:2014-07-17 16:20:21

标签: c# xml linq

我想修改一个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>

我在c#中使用以下代码来搜索正确的属性并设置值:

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“/&gt;”)。 attrib 119行现在显示如下:

<Attr num="119" name="Material" desc="Material." type="s" ord="1">Steel, Mild</Attr>

所以我的问题是:如何在不丢失XML的最后部分的情况下设置此值?

因此,在做了一些研究后,我相信我想要做的只是在不丢失子元素的情况下向现有元素添加另一个属性。感谢您的答案到目前为止,但我误解了我原来的问题,我不认为它们适用于我正在尝试做的事情。

很抱歉所有的困惑,第一个答案做了我需要做的事情。

2 个答案:

答案 0 :(得分:1)

使用

temp.SetAttributeValue("value", MaterialName);

如果您希望将其作为XML元素值,您将失去内部元素&#39; Valid&#39;。你不能同时拥有内部文本和内部XML元素。

答案 1 :(得分:0)

而不是.SetValue()尝试使用.Add().AddFirst()

temp.AddFirst(MaterialName)