C# 替换XContainer上的元素,包括根元素

C# 替换XContainer上的元素,包括根元素,c#,xml,linq,C#,Xml,Linq,给定一个XContainer,我想完全包装它的内容(包括根元素)。XContainer包含一些XML。我试图通过在父元素中包装XContainer内容来创建XHTML文档 XElement headElement = new XElement("head"); XElement bodyElement = new XElement("body", container); container.ReplaceWith(new XElement("html", headElement, body

给定一个XContainer,我想完全包装它的内容(包括根元素)。XContainer包含一些XML。我试图通过在父元素中包装XContainer内容来创建XHTML文档

 XElement headElement = new XElement("head");
 XElement bodyElement = new XElement("body", container);
 container.ReplaceWith(new XElement("html", headElement, bodyElement));
上述方法不起作用。这可能吗?或者我需要创建另一个XContainer并使用原始XContainer的内容构建它吗

更新

为这个模糊的问题道歉。让我添加一些上下文。我有一个方法,它将XContainer作为参数。我想修改这个XContainer实例。期望的最终结果是原始XContainer内容被“包装”在一个body元素中。在下面的示例中,调用ReplaceWith()后,XContainer似乎没有改变。这意味着容器不包括Elemenet、“html、head或body”。希望这更清楚

  protected void BuildXhtmlDocument(XContainer container)
    {
        XElement headElement = new XElement("head");
        XElement bodyElement = new XElement("body", container);
        container.ReplaceWith(new XElement("html", headElement, bodyElement));
    }

对我有用。例如:

using System;
using System.Xml.Linq;

public class Test 
{
    static void Main() 
    {
        XDocument doc = new XDocument();
        doc.Add(new XElement("foo", new XElement("bar")));
        Console.WriteLine("Before:");
        Console.WriteLine(doc);
        Console.WriteLine();

        XContainer container = doc.Root;
        XElement headElement = new XElement("head");
        XElement bodyElement = new XElement("body", container);
        container.ReplaceWith(new XElement("html", headElement, bodyElement));
        Console.WriteLine("After:");
        Console.WriteLine(doc);
    }
}
输出:

Before:
<foo>
  <bar />
</foo>

After:
<html>
  <head />
  <body>
    <foo>
      <bar />
    </foo>
  </body>
</html>
之前:
之后:
看起来它表现得很完美。(这恰好是文档的根元素,但不必如此。)


现在,为了能够真正帮助您,我们需要知道您试图做的与上面的不同之处——或者,如果这就是您试图做的,我们必须看到我的代码和您的代码之间的差异…

我已经更新了我的问题。我希望能更清楚地知道我在尝试什么。谢谢你的回复。