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

时间:2012-11-20 23:16:53

标签: 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, bodyElement));

以上不起作用。这可能吗?或者我是否需要创建另一个XContainer并使用原始XContainer的内容构建它?

更新

道歉的模糊问题。让我补充一些背景。我有一个方法,它将XContainer作为参数。我想修改这个XContainer实例。期望的最终结果将是在主体元素中“包裹”的原始XContainer内容。在下面的示例中,在调用ReplaceWith()之后,XContainer似乎没有变化。意味着容器不包括elemenets,“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));
    }

1 个答案:

答案 0 :(得分:0)

适合我。例如:

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>

看起来它表现得很完美。 (此发生是文档的根元素,但不一定是。)

现在,要真正能够帮助你,我们需要知道你从上面尝试做什么有什么不同 - 或者如果你想要做什么做,我们必须看到我的代码和你的代码之间的区别......