Come faccio ad aggiungere un tipo di documento a un XDocument?
-
06-07-2019 - |
Domanda
Ho un oggetto XDocument esistente al quale vorrei aggiungere un doctype XML. Ad esempio:
XDocument doc = XDocument.Parse("<a>test</a>");
Posso creare un XDocumentType usando:
XDocumentType doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
Ma come posso applicarlo all'XDocument esistente?
Soluzione
Puoi aggiungere un XDocumentType
a un XDocument
esistente, ma deve essere il primo elemento aggiunto. La documentazione che lo circonda è vaga.
Grazie a Jeroen per aver sottolineato l'approccio conveniente dell'uso di AddFirst
nei commenti. Questo approccio consente di scrivere il seguente codice, che mostra come aggiungere XDocumentType
dopo che XDocument
ha già degli elementi:
var doc = XDocument.Parse("<a>test</a>");
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
doc.AddFirst(doctype);
In alternativa, puoi usare il metodo Aggiungi
per aggiungere un XDocumentType
a un XDocument
esistente, ma l'avvertenza è che nessun altro elemento dovrebbe esiste dal momento che deve essere il primo.
XDocument xDocument = new XDocument();
XDocumentType documentType = new XDocumentType("Books", null, "Books.dtd", null);
xDocument.Add(documentType);
D'altra parte, quanto segue non è valido e si tradurrebbe in InvalidOperationException: " Questa operazione creerebbe un documento strutturato in modo errato. "
xDocument.Add(new XElement("Books"));
xDocument.Add(documentType); // invalid, element added before doctype
Altri suggerimenti
Passalo al XDocument
costruttore ( esempio completo ):
XDocument doc = new XDocument(
new XDocumentType("a", "-//TEST//", "test.dtd", ""),
new XElement("a", "test")
);
o usa XDocument. Aggiungi
( XDocumentType
deve essere aggiunto prima dell'elemento root):
XDocument doc = new XDocument();
doc.Add(new XDocumentType("a", "-//TEST//", "test.dtd", ""));
doc.Add(XElement.Parse("<a>test</a>"));