Vous pouvez ajouter un XDocumentType
à un XDocument
existant, mais il doit être le premier élément ajouté. La documentation entourant ceci est vague.
Merci à Jeroen pour avoir souligné l'approche pratique de l'utilisation de AddFirst
dans les commentaires. Cette approche vous permet d'écrire le code suivant, qui montre comment ajouter le XDocumentType
après la XDocument
a déjà des éléments:
var doc = XDocument.Parse("<a>test</a>");
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
doc.AddFirst(doctype);
Alternativement, vous pouvez utiliser la méthode Add
pour ajouter un XDocumentType
à un XDocument
existant, mais le caveat est qu'aucun autre élément ne devrait exister puisqu'il doit être le premier.
XDocument xDocument = new XDocument();
XDocumentType documentType = new XDocumentType("Books", null, "Books.dtd", null);
xDocument.Add(documentType);
D'autre part, ce qui suit est invalide et entraînerait une InvalidOperationException: « Cette opération créerait un document mal structuré. »
xDocument.Add(new XElement("Books"));
xDocument.Add(documentType); // invalid, element added before doctype
Cela s'applique-t-il également à XDocument? Le lien MSDN pointe vers XmlDocument. – dtb
@dtb: c'est le cas, mais je ne l'ai pas trouvé indiqué sur MSDN pour XDocument. Voir aussi le code mis à jour et InvalidOperationException. –
Vous pouvez ajouter un XDocumentType plus tard, mais vous devez vous assurer qu'il s'agit du premier élément de 'XDocument'. Vous pouvez le faire en utilisant 'xDocument.AddFirst (documentType)' à la place de 'xDocument.Add (documentType)'. –