Wie füge ich einen Dokumenttyp zu einem XDocument?
-
06-07-2019 - |
Frage
Ich habe ein vorhandenes XDocument-Objekt, das Ich mag würde eine XML Doctype hinzuzufügen. Zum Beispiel:
XDocument doc = XDocument.Parse("<a>test</a>");
Ich kann ein XDocumentType erstellen mit:
XDocumentType doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
Aber wie bewerbe ich mich, dass zu dem bestehenden XDocument?
Lösung
Sie können eine XDocumentType
zu einem bestehenden XDocument
hinzufügen, aber es muss das erste Element hinzugefügt. Die Dokumentation dieser Umgebung ist vage.
Dank Jeroen für den Hinweis auf den bequemen Ansatz AddFirst
in den Kommentaren zu verwenden. Dieser Ansatz ermöglicht es Ihnen, den folgenden Code zu schreiben, die zeigen, wie die XDocumentType
hinzufügen, nachdem die XDocument
bereits Elemente hat:
var doc = XDocument.Parse("<a>test</a>");
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
doc.AddFirst(doctype);
Alternativ können Sie die Add
Methode verwenden, um eine XDocumentType
zu einem bestehenden XDocument
hinzuzufügen, aber der Nachteil ist, dass kein anderes Element sollte vorhanden sein, da es zuerst sein muss.
XDocument xDocument = new XDocument();
XDocumentType documentType = new XDocumentType("Books", null, "Books.dtd", null);
xDocument.Add(documentType);
Auf der anderen Seite wird die folgende ungültig ist und in einer InvalidOperationException führen würde: „Dieser Vorgang würde ein falsch strukturiertes Dokument erstellen“
xDocument.Add(new XElement("Books"));
xDocument.Add(documentType); // invalid, element added before doctype
Andere Tipps
Übergeben Sie einfach an die XDocument
Konstruktor ( full Beispiel ):
XDocument doc = new XDocument(
new XDocumentType("a", "-//TEST//", "test.dtd", ""),
new XElement("a", "test")
);
oder benutzen XDocument.Add
(der XDocumentType
hat vor dem Wurzelelement hinzugefügt werden):
XDocument doc = new XDocument();
doc.Add(new XDocumentType("a", "-//TEST//", "test.dtd", ""));
doc.Add(XElement.Parse("<a>test</a>"));