Как добавить тип документа в XDocument?
У меня есть существующий объект XDocument, к которому я хотел бы добавить тип документа XML. Например:
XDocument doc = XDocument.Parse("<a>test</a>");
Я могу создать XDocumentType используя:
XDocumentType doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
Но как мне применить это к существующему XDocument?
2 ответа
Вы можете добавить 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
Просто передайте это XDocument
конструктор ( полный пример):
XDocument doc = new XDocument(
new XDocumentType("a", "-//TEST//", "test.dtd", ""),
new XElement("a", "test")
);
или использовать XDocument.Add
(XDocumentType
должен быть добавлен перед корневым элементом):
XDocument doc = new XDocument();
doc.Add(new XDocumentType("a", "-//TEST//", "test.dtd", ""));
doc.Add(XElement.Parse("<a>test</a>"));