簡體   English   中英

將HTML 5文檔類型添加到XDocument(.NET)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM