Добавить тип документа HTML 5 в XDocument (.NET) - PullRequest
2 голосов
/ 13 сентября 2009

При создании типа документа для System.Xml.Linq.XDocument, как это:

doc.AddFirst(new XDocumentType("html", null, null, null));

Полученный сохраненный XML-файл начинается с:

<!DOCTYPE html >

Обратите внимание на дополнительное пространство перед закрывающей угловой скобкой. Как я могу предотвратить появление этого пространства? Я хотел бы чистый способ, если это возможно:)

Ответы [ 3 ]

4 голосов
/ 13 сентября 2009

Вы не получите пробел, если напишите 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();
        }
2 голосов
/ 14 сентября 2009

Один из подходов - написать класс-оболочку для XmlWriter. Итак:

XmlWriter writer = new MyXmlWriterWrapper(XmlWriter.Create(..., settings))

Затем для класса MyXmlWriterWrapper определите каждый метод в интерфейсе класса XmlWriter для прямой передачи вызова в упакованный модуль записи, за исключением метода 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);
    }
}

Правда, не особо чистое решение, но оно подойдет.

0 голосов
/ 13 сентября 2009

Я могу ошибаться, но я думаю, что это пробел, потому что после HTML ожидается больше параметров. Хотя HTML5 это позволяет.

Попробуйте указать хотя бы третий параметр (* .dtd). Или сделайте что-то вроде этого:

new XDocumentType("html", "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd", null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...