我有一个代码来替换resx文件中value标记的内容。如果我获取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
为什么要添加这些新行?
XElement.Value from MSDN:获取或设置此元素的串联文本内容。
所以dataEl.Value返回在"数据"节点中找到的所有文本。在这种情况下,只有"value"子节点存在,因此它会返回文本,但理论上,您可以在其中包含其他子节点,如"value2"。
在这种情况下,您最终会得到"myvalue"+换行符+"myvalue2",这似乎是.net中的默认实现,我认为如果您只有一个子级,它也会使用此换行符。
另一方面:XElement valueEl = dataEl.Element("value");
valueEl没有任何子元素,所以valueEl.Value只是一个字符串。
为什么要使用dataEl.SetElementValue("value",dataEl.value)?是否要设置父"数据"节点的所有连接文本?