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