Domanda

Quando si crea un tipo di documento per un System.Xml.Linq.XDocumento come questo:

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

Il file XML salvato risultante inizia con:

<!DOCTYPE html >

Notare lo spazio extra prima della parentesi angolare di chiusura. Come posso impedire che questo spazio appaia? Vorrei un modo pulito, se possibile :)

È stato utile?

Soluzione

Un approccio è scrivere una classe wrapper per XmlWriter. Quindi:

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

Quindi, per la classe MyXmlWriterWrapper, definire ogni metodo sull'interfaccia della classe XmlWriter per passare la chiamata direttamente al writer spostato, ad eccezione del metodo WriteDocType. Puoi quindi definirlo come qualcosa del tipo:

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

Certo non è una soluzione particolarmente pulita, ma farà il lavoro.

Altri suggerimenti

Non ottieni spazio se scrivi su un 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();
        }

Potrei sbagliarmi, ma penso che questo spazio sia dovuto al fatto che ci sono più parametri previsti dopo l'HTML. Anche se HTML5 lo consente.

Prova a specificare almeno il 3o parametro (* .dtd). O fai qualcosa del genere:

new XDocumentType("html", "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd", null)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top