Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将文档类型添加到XDocument?_C#_Xml_Doctype_Linq To Xml - Fatal编程技术网

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

C# 如何将文档类型添加到XDocument?,c#,xml,doctype,linq-to-xml,C#,Xml,Doctype,Linq To Xml,我有一个现有的XDocument对象,我想在其中添加一个XML doctype。例如: XDocument doc = XDocument.Parse("<a>test</a>"); 但是如何将其应用于现有的XDocument?只需将其传递给(): 或使用(必须在根元素之前添加XDocumentType): XDocument doc=new XDocument(); 添加(新的XDocumentType(“a”、“-//TEST//”、“TEST.dtd”、”); d

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

XDocument doc = XDocument.Parse("<a>test</a>");
但是如何将其应用于现有的XDocument?

只需将其传递给():

或使用(必须在根元素之前添加
XDocumentType
):

XDocument doc=new XDocument();
添加(新的XDocumentType(“a”、“-//TEST//”、“TEST.dtd”、”);
doc.Add(XElement.Parse(“test”);

您可以将
XDocumentType
添加到现有的
XDocument
,但它必须是添加的第一个元素。围绕这一点的文档是模糊的

感谢Jeroen在评论中指出了使用
AddFirst
的便捷方法。此方法允许您编写以下代码,其中显示了如何在
XDocument
已包含元素之后添加
XDocumentType

var doc = XDocument.Parse("<a>test</a>");
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
doc.AddFirst(doctype);
另一方面,以下内容无效并将导致InvalidOperationException:“此操作将创建结构不正确的文档。”


这是否也适用于XDocument?MSDN链接指向XmlDocument。@dtb:是的,但我在MSDN for XDocument上找不到它。另请参见更新的代码和InvalidOperationException。您可以稍后添加XDocumentType,但必须确保它是
XDocument
中的第一个元素。您可以使用
xDocument.AddFirst(documentType)
而不是off
xDocument.Add(documentType)
@Jeroen来实现这一点。谢谢,这样更方便。我已更新我的回复,以包含此信息。
XDocument doc = new XDocument(
    new XDocumentType("a", "-//TEST//", "test.dtd", ""),
    new XElement("a", "test")
);
XDocument doc = new XDocument();
doc.Add(new XDocumentType("a", "-//TEST//", "test.dtd", ""));
doc.Add(XElement.Parse("<a>test</a>"));
var doc = XDocument.Parse("<a>test</a>");
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
doc.AddFirst(doctype);
XDocument xDocument = new XDocument();
XDocumentType documentType = new XDocumentType("Books", null, "Books.dtd", null);
xDocument.Add(documentType);
xDocument.Add(new XElement("Books"));
xDocument.Add(documentType);  // invalid, element added before doctype