给定一个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));
}
答案 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>
看起来它表现得很完美。 (此发生是文档的根元素,但不一定是。)
现在,要真正能够帮助你,我们需要知道你从上面尝试做什么有什么不同 - 或者如果是你想要做什么做,我们必须看到我的代码和你的代码之间的区别......