2013-02-07 39 views
0

我有一個代碼,用於替換resx文件中值標記的內容。 如果我取價值元素,並更改其內容一切正常:XElement.SetElementValue在值前後添加新行

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添加這些新行?

+2

爲什麼這很重要? :) –

+0

因爲我失去了15分鐘,因爲我想知道如何工作:-) – Filip

+0

我知道這種感覺 - 也許價值本身包含「新行標籤」 試試這個: 'dataEl.SetElementValue(「value 」,dataEl.Value.Replace( 「\ n」, 「」));' –

回答

1

來自MSDN的XElement.Value:獲取或設置此元素的連接文本內容。

因此,dataEl.Value返回在「數據」節點內找到的所有文本。在這種情況下,只有「value」子節點存在,因此它返回它的文本,但理論上你可以有其他的子節點,如「value2」。

在這種情況下,您最終會得到「myvalue」+ newline +「myvalue2」,這似乎是.net中的默認實現,並且我認爲如果您只有一個孩子,它也會使用此換行符。

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

valueEl沒有任何子元素等等valueEl.Value只是一個字符串。

爲什麼要使用dataEl.SetElementValue(「value」,dataEl.Value)?你想設置父「數據」節點的所有連接文本嗎?

+0

你是對的,這是一個愚蠢的錯字。它應該是:'dataEl.SetElementValue(「value」,valueEl.Value);'。當然,這個代碼不會做任何事情,因爲我簡化它來指出問題。謝謝。 – Filip