C# 向XElement添加HTML

C# 向XElement添加HTML,c#,xml,linq,C#,Xml,Linq,我使用System.Linq.Xml中的类来构建Xml对象。但我使用的API要求我将直接的HTML代码放入标记中: <message><html><body>...</body></html></message> 它只是转义所有HTML字符 new XElement("message", new XCData(myHtmlStringVariable)); 它将HTML包装在API不喜欢的..]]>中 有没有一种方法可以

我使用System.Linq.Xml中的类来构建Xml对象。但我使用的API要求我将直接的HTML代码放入标记中:

<message><html><body>...</body></html></message>
它只是转义所有HTML字符

new XElement("message", new XCData(myHtmlStringVariable));
它将HTML包装在API不喜欢的
..
]]>

有没有一种方法可以直接将HTML插入XElement的内容?

您可以这样做:

string html = "<html><body></body></html>";
XElement message = new XElement("message", XElement.Parse(html));
string html=”“;
XElement message=new-XElement(“message”,XElement.Parse(html));
这确实要求HTML是格式良好的XML,并且只有一个根元素

如果您有一个包含多个根元素的HTML代码段,则始终可以创建如下元素:

string html = "<p>foo</p><p>bar</p>";
XElement message = XElement.Parse("<message>" + html + "</message>");
string html=“foo

bar

”; XElement message=XElement.Parse(“+html+”);
对格式良好的XML的要求仍然存在。这意味着您必须有空元素,如

,而不是

。如果您想将HTML直接嵌入XML中,就没有办法解决这个问题

此外,如果有可能并且您的API接受它,我建议为HTML元素提供适当的XHTML名称空间:

string html = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><body></body></html>";
XElement message = new XElement("message", XElement.Parse(html));
string html=”“;
XElement message=new-XElement(“message”,XElement.Parse(html));
这将生成如下XML:

string html = "<p>foo</p><p>bar</p>";
XElement message = XElement.Parse("<message>" + html + "</message>");


太棒了,我来测试一下。只是想知道,如果HTML格式不正确会发生什么?好吧,那么如果您没有将HTML作为有效的XML,它就会崩溃。。。我想这是需要注意的。@d1k_是:如果格式不正确,它会抛出一个
xmleexception
,这样您就可以捕捉到它。不幸的是,据我所知,没有一个
TryParse
方法。请小心这段代码会失败:var xraw=new xraw(“
”);新XElement(“消息”,xraw,xraw);它似乎不会多次处理XRaw对象的使用(WriteTo只调用一次)。
new XElement("message", new XRaw(myHtmlStringVariable));

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);
  }
}