1

给定一个 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 元素中。在下面的示例中,XContainer 在调用 ReplaceWith() 之后似乎没有改变。这意味着容器不包括元素,“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));
    }
4

1 回答 1

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>

看起来它的行为很完美。(这恰好是文档的根元素,但不一定是。)

现在,为了真正能够为您提供帮助,我们需要知道您尝试执行的操作与上述内容有何不同 - 或者如果这就是您尝试执行的操作,我们将不得不看到差异在我的代码和你的代码之间......

于 2012-11-20T23:23:06.483 回答