Comment ajouter un type de document à un XDocument?
-
06-07-2019 - |
Question
Je souhaite ajouter un doctype XML à un objet XDocument existant. Par exemple:
XDocument doc = XDocument.Parse("<a>test</a>");
Je peux créer un XDocumentType en utilisant:
XDocumentType doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
Mais comment appliquer cela au XDocument existant?
La solution
Vous pouvez ajouter un XDocumentType
à un XDocument
existant, mais il doit s'agir du premier élément ajouté. La documentation qui l’entoure est vague.
Merci à Jeroen d'avoir signalé l'approche pratique consistant à utiliser AddFirst
dans les commentaires. Cette approche vous permet d'écrire le code suivant, qui montre comment ajouter le XDocumentType
après que le XDocument
comporte déjà des éléments:
var doc = XDocument.Parse("<a>test</a>");
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
doc.AddFirst(doctype);
Vous pouvez également utiliser la méthode Add
pour ajouter un XDocumentType
à un XDocument
existant, à ceci près qu'aucun autre élément ne doit existe car il doit être le premier.
XDocument xDocument = new XDocument();
XDocumentType documentType = new XDocumentType("Books", null, "Books.dtd", null);
xDocument.Add(documentType);
Par contre, ce qui suit est invalide et entraînerait une exception InvalidOperationException: "Cette opération créerait un document structuré de manière incorrecte."
xDocument.Add(new XElement("Books"));
xDocument.Add(documentType); // invalid, element added before doctype
Autres conseils
Transmettez-le simplement au XDocument
constructeur ( exemple complet ):
XDocument doc = new XDocument(
new XDocumentType("a", "-//TEST//", "test.dtd", ""),
new XElement("a", "test")
);
ou utilisez XDocument. Ajoutez
(le XDocumentType
doit être ajouté avant l'élément racine):
XDocument doc = new XDocument();
doc.Add(new XDocumentType("a", "-//TEST//", "test.dtd", ""));
doc.Add(XElement.Parse("<a>test</a>"));