XElement.SetElementValue在值前后添加新行

本文关键字:添加 新行 SetElementValue XElement | 更新日期: 2023-09-27 17:58:05

我有一个代码来替换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.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)?是否要设置父"数据"节点的所有连接文本?