如何将文档类型添加到XDocument?

时间:2009-09-11 20:19:18

标签: c# xml doctype linq-to-xml

我有一个现有的XDocument对象,我想添加一个XML doctype。例如:

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

我可以使用:

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

但是如何将其应用于现有的XDocument?

2 个答案:

答案 0 :(得分:14)

您可以向现有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,但需要注意的是,由于必须先存在其他元素,因此不应存在其他元素。< / p>

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

答案 1 :(得分: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>"));