2010-11-10 73 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

相关问题