Frage

Wenn Sie eine Doctype für eine System.Xml.Linq.XDocument wie folgt zu erstellen:

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

Die resultierende gespeicherte XML-Datei beginnt mit:

<!DOCTYPE html >

Beachten Sie den zusätzlichen Platz vor dem Schließen Winkel. Wie kann ich diesen Raum erscheinen, verhindern? Ich möchte eine saubere Art und Weise, wenn möglich:)

War es hilfreich?

Lösung

Ein Ansatz ist es, eine Wrapper-Klasse für die XmlWriter zu schreiben. Also:

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

dann für die Klasse MyXmlWriterWrapper jede Methode auf der Schnittstelle XmlWriter Klasse definieren, um den Anruf direkt durch zu dem umwickelten writer zu passieren, mit Ausnahme der WriteDocType Methode. Anschließend können Sie festlegen, dass als so etwas wie:

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);
    }
}

Nicht eine besonders saubere Lösung zugegeben, aber es wird die Arbeit machen.

Andere Tipps

Sie haben nicht den Raum, wenn man zu einem XmlTextWriter schreiben:

        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();
        }

Ich könnte falsch sein, aber ich denke, dieser Raum, weil es nach der HTML mehr Parameter sind zu erwarten. Obwohl HTML5 erlaubt es.

Versuchen Sie, mindestens den dritten Parameter als auch (* .dtd) angeben. Oder etwas tun, wie folgt aus:

new XDocumentType("html", "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd", null)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top