¿Cómo agrego un tipo de documento a un XDocument?
-
06-07-2019 - |
Pregunta
Tengo un objeto XDocument existente al que me gustaría agregar un doctype XML. Por ejemplo:
XDocument doc = XDocument.Parse("<a>test</a>");
Puedo crear un XDocumentType usando:
XDocumentType doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
¿Pero cómo lo aplico al XDocument existente?
Solución
Puede agregar un XDocumentType
a un XDocument
existente, pero debe ser el primer elemento agregado. La documentación que lo rodea es vaga.
Gracias a Jeroen por señalar el enfoque conveniente de usar AddFirst
en los comentarios. Este enfoque le permite escribir el siguiente código, que muestra cómo agregar el XDocumentType
después de que el XDocument
ya tenga elementos:
var doc = XDocument.Parse("<a>test</a>");
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
doc.AddFirst(doctype);
Alternativamente, puede usar el método Add
para agregar un XDocumentType
a un XDocument
existente, pero la advertencia es que ningún otro elemento debería existir ya que tiene que ser el primero.
XDocument xDocument = new XDocument();
XDocumentType documentType = new XDocumentType("Books", null, "Books.dtd", null);
xDocument.Add(documentType);
Por otro lado, lo siguiente no es válido y daría lugar a una InvalidOperationException: " Esta operación crearía un documento estructurado incorrectamente. "
xDocument.Add(new XElement("Books"));
xDocument.Add(documentType); // invalid, element added before doctype
Otros consejos
Simplemente páselo al XDocument
constructor ( ejemplo completo ):
XDocument doc = new XDocument(
new XDocumentType("a", "-//TEST//", "test.dtd", ""),
new XElement("a", "test")
);
o use XDocument. Agregar
(el XDocumentType
debe agregarse antes del elemento raíz):
XDocument doc = new XDocument();
doc.Add(new XDocumentType("a", "-//TEST//", "test.dtd", ""));
doc.Add(XElement.Parse("<a>test</a>"));