如何避免System.Xml.Linq.XElement转义HTML内容?

awj*_*awj 5 html asp.net xelement escaping

我正在使用XElement对象在ASP.NET页面的代码隐藏中构建一些HTML.

我可能会或者可能不会像我一样向这个XElement添加一些XAttributes,方式如下:

var elmnt = new XElement("div",
     new XAttribute("id", "myDiv"),
     );
Run Code Online (Sandbox Code Playgroud)

现在,如果我想在myDiv中添加一些包含HTML的内容,那么XElement会自动转义,在我的情况下,这是不可取的.

所以,如果我有:

var elmnt = new XElement("div",
     new XAttribute("id", "myDiv"),
     "<span id='content'>hello world</span>"
     );
Run Code Online (Sandbox Code Playgroud)

然后使用以下代码将其渲染为Placeholder对象:

myPlaceholder.Controls.Add(new System.Web.UI.WebControls.Literal { Text = elmnt.CreateNavigator().OuterXml });
Run Code Online (Sandbox Code Playgroud)

当页面加载时,源显示elmnt中的内部内容已被转义,并在页面的源中具有以下格式:

&lt;span id='content'&gt;hello world&lt;/span&gt;
Run Code Online (Sandbox Code Playgroud)

鉴于我在这里编译的XML是有效的HTML,并且内部内容也是有效的HTML,我如何告诉XElement父对象不要逃避内部内容?如何将其保留为原生格式?

Ser*_*-Tm 8

 var elmnt = new XElement("div",
   new XAttribute("id", "myDiv"),
   new XRaw("<span id='content'>hello world</span>")
 );


public class XRaw : XText
{
  public XRaw(string text):base(text){}
  public XRaw(XText text): base(text){}

  public override void WriteTo(System.Xml.XmlWriter writer)
  {
    writer.WriteRaw(this.Value);
  }
}
Run Code Online (Sandbox Code Playgroud)