XElement.SetElementValue在值之前和之后添加新行

时间:2013-02-07 14:02:05

标签: c# .net xml linq linq-to-xml

我有一个代码,用于替换resx文件中value标记的内容。 如果我获取值元素并更改其内容,一切都按预期工作:

foreach (XElement dataEl in doc.Root.Descendants("data"))
{
    XElement valueEl = dataEl.Element("value");
    valueEl.Value = valueEl.Value;
    Console.WriteLine(dataEl);
}

结果:

...
<value>myvalue</value>
...

但是设置值:

dataEl.SetElementValue("value", dataEl.Value);

结果:

...
<value>
myvalue
</value>
...

为什么SetElementValue添加这些新行?

1 个答案:

答案 0 :(得分:1)

来自MSDN的XElement.Value:获取或设置此元素的连接文本内容。

因此dataEl.Value返回在“data”节点内找到的所有文本。在这种情况下,只存在“value”子节点,因此它返回其文本,但理论上你可以在其中包含其他子节点,如“value2”。

在这种情况下,你最终会得到“myvalue”+ newline +“myvalue2”,这似乎是.net中的默认实现,如果你只有一个孩子,我认为它会使用这个新行。

另一方面: XElement valueEl = dataEl.Element("value");

valueEl没有任何子元素,因此valueEl.Value只是一个字符串。

为什么要使用dataEl.SetElementValue(“value”,dataEl.Value)?是否要设置父“数据”节点的所有连接文本?