将HTML添加到XElement

dka*_*zon 3 c# xml linq

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

<message><html><body>...</body></html></message>
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚如何使用XElement做到这一点.

new XElement("message", myHtmlStringVariable);
Run Code Online (Sandbox Code Playgroud)

这只是逃避所有的HTML字符

new XElement("message", new XCData(myHtmlStringVariable));
Run Code Online (Sandbox Code Playgroud)

这包裹在了HTML <![CDATA[... ]]>该API犯规等.

那么有没有办法将HTML直接插入XElement的内容?

Sve*_*ven 10

你可以这样做:

string html = "<html><body></body></html>";
XElement message = new XElement("message", XElement.Parse(html));
Run Code Online (Sandbox Code Playgroud)

这确实要求HTML是格式良好的XML并且只有一个根元素.

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

string html = "<p>foo</p><p>bar</p>";
XElement message = XElement.Parse("<message>" + html + "</message>");
Run Code Online (Sandbox Code Playgroud)

对格式良好的XML的要求仍然存在.这意味着你必须有空元素,<br />而不是<br>.如果您想直接在XML中嵌入HTML,则无法解决这个问题.

另外,如果可能并且您的API接受它,我建议为HTML元素提供正确的XHTML命名空间:

string html = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><body></body></html>";
XElement message = new XElement("message", XElement.Parse(html));
Run Code Online (Sandbox Code Playgroud)

这会生成如下XML:

<message>
  <html xmlns="http://www.w3.org/1999/xhtml">
    <body></body>
  </html>
</message>
Run Code Online (Sandbox Code Playgroud)