我有一个代码,用于替换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
添加这些新行?
答案 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)?是否要设置父“数据”节点的所有连接文本?