2010-11-10 56 views
0

假設我有一個名爲XD的XDocument,與已經創建了下面的XML。如何使用LINQ頂級元素添加到XML

<Alert> 
    <Source> 
    <DetectTime>12:03:2010 12:22:21</DetectTime> 
    </Source> 
</Alert> 

我怎麼能添加另一個警報元素,使得XML成爲:

<Alert> 
    <Source> 
    <DetectTime>12:03:2010 12:22:21</DetectTime> 
    </Source> 
</Alert> 
<Alert> 
</Alert> 

添加額外的元素似乎是相當容易的,但在一個頂級元素添加時節選。

+0

你能告訴我們你用來添加頂級節點的代碼嗎? – jdecuyper 2010-11-11 01:45:43

回答

0

您所需的XML結構無效;您需要一個根元素才能添加另一個「警報」節點。下面的代碼演示瞭如何當一個根節點存在添加:

var xdoc = XDocument.Parse(@"<root> 
    <Alert> 
    <Source> 
     <DetectTime>12:03:2010 12:22:21</DetectTime> 
    </Source> 
    </Alert> 
</root>"); 
xdoc.Root.Add(new XElement("Alert")); 
Console.WriteLine(xdoc); 

以上代碼生成<Alert />,因爲沒有子節點添加到它(一旦你添加到它,這將改變)。如果您想要結束標籤,您可以使用xdoc.Root.Add(new XElement("Alert", String.Empty));代替。

要驗證所需輸出有一個無效的結構,你可以嘗試使用XDocument.Parse類似於我上面所示解析它。

+0

感謝艾哈邁德的快速反應。我擁有的xml正在動態生成,即即時生成。像這樣的靜態塊在窗外。它的確報告了一個例外,當我試圖增加另一個元素。 – 2010-11-11 12:25:42

+0

所以它似乎只有在你試圖輸入的元素上面有一個封閉元素時才起作用。 – 2010-11-11 12:34:01

+0

@scope_creep我不知道你的最終目標是什麼,但一個想法是連接了''和''標籤,你的XML,添加你需要的,然後使用LINQ做你的工作,最後提取所有元素'Alert'節點出來作爲一個字符串。再次,不知道你的目標是什麼,但這最終會爲你帶來一個你想要的XML結構的字符串。你有興趣做什麼? – 2010-11-11 14:42:14

相關問題