[英]Add HTML 5 doctype to XDocument (.NET)
在為System.Xml.Linq.XDocument創建文檔類型時,如下所示:
doc.AddFirst(new XDocumentType("html", null, null, null));
結果保存的XML文件以以下內容開頭:
<!DOCTYPE html >
請注意,在尖括號前面有多余的空間。 如何防止出現該空間? 如果可能的話,我想用一種干凈的方法:)
如果寫入XmlTextWriter,則不會獲得空間:
XDocument doc = new XDocument();
doc.AddFirst(new XDocumentType("html", null, null, null));
doc.Add(new XElement("foo", "bar"));
using (XmlTextWriter writer = new XmlTextWriter("c:\\temp\\no_space.xml", null)) {
writer.Formatting = Formatting.Indented;
doc.WriteTo(writer);
writer.Flush();
writer.Close();
}
一種方法是為XmlWriter編寫包裝器類。 所以:
XmlWriter writer = new MyXmlWriterWrapper(XmlWriter.Create(..., settings))
然后為MyXmlWriterWrapper類定義XmlWriter類接口上的每個方法,以將調用直接傳遞給包裝的writer,但WriteDocType方法除外。 然后,您可以將其定義為:
public override void WriteDocType(string name, string pubid, string sysid, string subset)
{
if ((pubid == null) && (sysid == null) && (subset == null))
{
this.wrappedWriter.WriteRaw("<!DOCTYPE HTML>");
}
else
{
this.wrappedWriter.WriteDocType(name, pubid, sysid, subset);
}
}
誠然,這不是一個特別干凈的解決方案,但可以完成工作。
我可能是錯的,但是我認為這個空間是因為HTML之后需要更多的參數。 盡管HTML5允許。
嘗試也至少指定第三個參數(* .dtd)。 或執行以下操作:
new XDocumentType("html", "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd", null)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.