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?

¿Fue útil?

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>"));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top