Вопрос

У меня есть существующий объект 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>"));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top