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?

War es hilfreich?

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>"));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top