2009-09-11 70 views
12

我有一個現有的XDocument對象,我想添加一個XML文檔類型。例如:如何將文檔類型添加到XDocument?

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

我可以創建使用XDocumentType:

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

但是我怎麼應用,爲現有的XDocument?

回答

14

您可以添加XDocumentType到現有的XDocument,但它必須是添加的第一個元素。圍繞這個的文檔是模糊的。

感謝Jeroen指出了在評論中使用AddFirst的方便方法。這種方法允許你寫下面的代碼,它顯示瞭如何添加XDocumentTypeXDocument已經要素:

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

或者,你可以使用Add方法將XDocumentType添加到現有XDocument,但警告的是,因爲它必須是第一個,所以不應該存在其他元素。

​​

在另一方面,以下是無效的,並會導致一個InvalidOperationException:「此操作將創建一個不正確的結構化文檔」

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

這是否也適用於XDocument? MSDN鏈接指向XmlDocument。 – dtb 2009-09-11 20:49:57

+1

@dtb:它的確如此,但我無法在MSDN上找到XDocument。另請參閱更新的代碼和InvalidOperationException。 – 2009-09-11 20:51:31

+1

稍後您可以添加XDocumentType,但您必須確保它是「XDocument」中的第一個元素。你可以使用'xDocument.AddFirst(documentType)'來代替'xDocument.Add(documentType)'。 – 2012-05-31 08:32:21

3

只是把它傳遞給XDocument constructorfull example):

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

或使用XDocument.Add(該XDocumentType已經到根元素之前添加):

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