C# 替换XContainer上的元素,包括根元素
给定一个XContainer,我想完全包装它的内容(包括根元素)。XContainer包含一些XML。我试图通过在父元素中包装XContainer内容来创建XHTML文档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
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>
之前:
之后:
看起来它表现得很完美。(这恰好是文档的根元素,但不必如此。)
现在,为了能够真正帮助您,我们需要知道您试图做的与上面的不同之处——或者,如果这就是您试图做的,我们必须看到我的代码和您的代码之间的差异…我已经更新了我的问题。我希望能更清楚地知道我在尝试什么。谢谢你的回复。