Ответ 1
Вы можете добавить XDocumentType
в существующий XDocument
, но это должен быть первый добавленный элемент. Документация, окружающая это, является неопределенной.
Благодаря Jeroen для указания удобного подхода использования AddFirst
в комментариях. Этот подход позволяет вам написать следующий код, который показывает, как добавить XDocumentType
после того, как XDocument
уже имеет элементы:
var doc = XDocument.Parse("<a>test</a>");
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
doc.AddFirst(doctype);
В качестве альтернативы вы можете использовать метод Add
для добавления XDocumentType
в существующий XDocument
, но оговорка заключается в том, что ни один другой элемент не должен существовать, поскольку он должен быть первым.
XDocument xDocument = new XDocument();
XDocumentType documentType = new XDocumentType("Books", null, "Books.dtd", null);
xDocument.Add(documentType);
С другой стороны, следующее недопустимо и приведет к исключению InvalidOperationException: "Эта операция приведет к созданию неправильно структурированного документа".
xDocument.Add(new XElement("Books"));
xDocument.Add(documentType); // invalid, element added before doctype