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 要素に「ラップ」されることです。以下の例では、ReplaceWith() の呼び出し後、XContainer は変更されていないように見えます。つまり、コンテナには「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 に答える