2009-09-11 22 views
12

XML doctype eklemek istediğim bir XDocument nesnesine sahibim. Örneğin:Bir XDocument belgesine nasıl belge ekleyebilirim?

XDocument doc = XDocument.Parse("<a>test</a>"); 

kullanıyorum bir XDocumentType oluşturabilirsiniz:

XDocumentType doctype = new XDocumentType("a", "-//TEST//", "test.dtd", ""); 

Ama mevcut XDocument nasıl olduğunu başvurabilirim? (Kök öğesinden önce eklenecek XDocumentType etmiştir)

XDocument doc = new XDocument(
    new XDocumentType("a", "-//TEST//", "test.dtd", ""), 
    new XElement("a", "test") 
); 

veya XDocument.Add kullanın::

cevap

14

Sen bir XDocumentType ekleyebilir Mevcut bir XDocument, ancak eklenen ilk öğe olmalıdır. Bunu çevreleyen belgeler belirsizdir.

Jeroen, yorumlarda AddFirst kullanmanın uygun yaklaşımını işaret ettiğinden dolayı teşekkür ederiz. Bu yaklaşım, XDocument zaten öğesi vardır sonra XDocumentType nasıl ekleneceğini gösteren şu kodu yazmak için izin verir:

var doc = XDocument.Parse("<a>test</a>"); 
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", ""); 
doc.AddFirst(doctype); 

Alternatif olarak, varolan XDocument bir XDocumentType eklemek için Add yöntemi kullanabilirsiniz, ancak Uyarı, ilk olması gerektiğinden başka hiçbir elementin olmaması gerektiğidir. Öte yandan

XDocument xDocument = new XDocument(); 
XDocumentType documentType = new XDocumentType("Books", null, "Books.dtd", null); 
xDocument.Add(documentType); 

aşağıdaki geçersizdir ve bir ınvalidoperationexception neden olacaktır: "Bu işlem bir yanlış yapılandırılmış belge oluşturacaktır"

xDocument.Add(new XElement("Books")); 
xDocument.Add(documentType); // invalid, element added before doctype 
+0

Bu, XDocument için de geçerli midir? MSDN bağlantısı XmlDocument için işaret eder. – dtb

+1

@dtb: öyle, ancak XDocument için MSDN'de belirtilen bulamadık. Ayrıca güncellenmiş kod ve InvalidOperationException bakın. –

+1

Daha sonra bir XDocumentType ekleyebilirsiniz, ancak bunun 'XDocument' öğesindeki ilk öğe olduğundan emin olmanız gerekir. Bunu, xDocument.Add (documentType) 'yerine' xDocument.AddFirst (documentType) 'kullanarak yapabilirsiniz. –

3

Sadece XDocument constructor (full example) iletecek

XDocument doc = new XDocument(); 
doc.Add(new XDocumentType("a", "-//TEST//", "test.dtd", "")); 
doc.Add(XElement.Parse("<a>test</a>"));