Question

Lors de la création d'un type de document pour un System.Xml.Linq.XDocument comme ceci:

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

Le fichier XML enregistré résultant commence par:

<!DOCTYPE html >

Notez l'espace supplémentaire avant le crochet d'angle de fermeture. Comment puis-je empêcher cet espace d'apparaître? Je voudrais un moyen propre si possible:)

Était-ce utile?

La solution

Une approche consiste à écrire une classe wrapper pour XmlWriter. Donc:

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

Ensuite, pour la classe MyXmlWriterWrapper, définissez chaque méthode sur l'interface de classe XmlWriter pour transmettre l'appel directement à l'enregistreur encapsulé, à l'exception de la méthode WriteDocType. Vous pouvez ensuite définir cela comme quelque chose comme:

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

Certes, la solution n'est pas particulièrement propre, mais elle fera l'affaire.

Autres conseils

Vous n'obtenez pas d'espace si vous écrivez sur 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();
        }

Je me trompe peut-être, mais je pense que cet espace est dû au fait que davantage de paramètres sont attendus après le code HTML. Bien que HTML5 le permette.

Essayez de spécifier également au moins le 3ème paramètre (* .dtd). Ou faire quelque chose comme ça:

new XDocumentType("html", "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd", null)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top