è possibile aggiungere un XDocumentType
a uno esistente XDocument
, ma deve essere il primo elemento aggiunto. La documentazione che circonda questo è vaga.
Grazie a Jeroen per aver sottolineato l'approccio pratico dell'utilizzo di AddFirst
nei commenti. Questo approccio permette di scrivere il codice seguente, che mostra come aggiungere il XDocumentType
dopo la XDocument
ha già elementi:
var doc = XDocument.Parse("<a>test</a>");
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
doc.AddFirst(doctype);
In alternativa, è possibile utilizzare il metodo Add
per aggiungere un XDocumentType
a un XDocument
esistente, ma la l'avvertenza è che nessun altro elemento dovrebbe esistere poiché deve essere il primo.
XDocument xDocument = new XDocument();
XDocumentType documentType = new XDocumentType("Books", null, "Books.dtd", null);
xDocument.Add(documentType);
D'altra parte, il seguente è valido e si tradurrebbe in un InvalidOperationException: "Questa operazione potrebbe creare un documento in modo non corretto strutturato"
xDocument.Add(new XElement("Books"));
xDocument.Add(documentType); // invalid, element added before doctype
fonte
2009-09-11 20:47:44
Questo vale anche per XDocument? Il collegamento MSDN punta a XmlDocument. – dtb
@dtb: lo fa, ma non è stato possibile trovarlo indicato su MSDN per XDocument. Vedi anche il codice aggiornato e InvalidOperationException. –
Puoi aggiungere un XDocumentType in seguito, ma devi assicurarti che sia il primo elemento in 'XDocument'. Puoi farlo usando 'xDocument.AddFirst (documentType)' invece off 'xDocument.Add (documentType)'. –