2013-03-06 83 views
1

我在隱藏沒有數據的XElements時遇到問題。隱藏沒有數據的XElement節點

如果我有這樣的代碼:

string missing = string.Empty; 
XElement missingNodes = new XElement("TOPLEVEL", 
    new XElement("FIELD1", "VALUE1"), 
    new XElement("FIELD2", missing), 
    new XElement("FIELD3", "VALUE3") 
); 

我最終建立這種架構:

<TOPLEVEL> 
    <FIELD1>VALUE1</FIELD1> 
    <FIELD2></FIELD2> 
    <FIELD3>VALUE3</FIELD3> 
</TOPLEVEL> 

如果我改變缺少有空代替的String.Empty,第二場變爲:

<FIELD2 /> 

有沒有簡單的方法來隱藏節點與空/空數據?

我想它看起來更像是這樣的:

<TOPLEVEL> 
    <FIELD1>VALUE1</FIELD1> 
    <FIELD3>VALUE3</FIELD3> 
</TOPLEVEL> 

編輯:

繼@sine和@ gunr2171的建議,我下樓的路不添加空/空節點。

因爲我想保持嵌套的新格式(沒有很多如果/然後分支)的一切,我嘗試使用空三檢查。有趣的是,如果您傳遞null作爲任何內容,則XElement不會留下任何工件。

所以這並獲得成功:

string missing = null; 
XElement missingNodes = new XElement("TOPLEVEL", 
    new XElement("FIELD1", "VALUE1"), 
    (missing != null) ? new XElement("FIELD2", missing) : null, 
    new XElement("FIELD3", "VALUE3") 
); 
+3

我認爲要做到這一點的唯一方法,不加入任何XElements與空值... – makim 2013-03-06 15:22:56

+0

是啊,要麼不添加節點或將空值應產生相同的結果。我不想添加節點,因爲我沒有花時間調用方法。請記住,您也可以使用'XElement.Add'來添加子元素而不是構造函數。 – gunr2171 2013-03-06 15:49:26

回答

1

我相信@sine是正確的。你只需要檢查值是否爲空/空,而不是插入值。

public void AddIfValid(XElement root, string tagName, string value, string excludeValue) 
{ 
    if (value != excludeValue) 
     root.Add(new XElement(tagName, value); 
}