我使用System.Linq.Xml中的类来构建XML对象。但我正在使用的API要求我将HTML代码直接放入标记中:
<message><html><body>...</body></html></message>
我似乎无法弄清楚如何使用XElement来做到这一点。
new XElement("message", myHtmlStringVariable);
这只是逃避所有HTML字符
new XElement("message", new XCData(myHtmlStringVariable));
将HTML包装在API不合适的<![CDATA[
... ]]>
中。
那么有没有办法将HTML直接插入到XElement的内容中?
答案 0 :(得分:9)
你可以这样做:
string html = "<html><body></body></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>");
对格式良好的XML的要求仍然存在。这意味着您必须拥有<br />
而非<br>
等空元素。如果你想直接在HTML中嵌入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));
这样生成XML:
<message>
<html xmlns="http://www.w3.org/1999/xhtml">
<body></body>
</html>
</message>
答案 1 :(得分:3)
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);
}
}