代码之家  ›  专栏  ›  技术社区  ›  James Sulak

如何向xdocument添加文档类型?

  •  12
  • James Sulak  · 技术社区  · 17 年前

    我有一个现有的xdocument对象,希望将xml doctype添加到其中。例如:

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

    我可以使用以下方法创建XDopeTrnType:

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

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

    2 回复  |  直到 14 年前
        1
  •  14
  •   Ahmad Mageed    14 年前

    你可以添加一个 XDocumentType 对现有的 XDocument ,但它必须是添加的第一个元素。围绕这一点的文件很模糊。

    感谢Jeroen指出使用 AddFirst 在评论中。此方法允许您编写以下代码,其中显示了如何添加 xdocumenttype文件类型 之后 X文档 已有元素:

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

    或者,您可以使用 Add 方法添加 xdocumenttype文件类型 对现有的 X文档 但需要注意的是,不应该存在其他元素,因为它必须是第一个元素。

    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
    
        2
  •  3
  •   dtb    17 年前

    把它传给 XDocument constructor ( full example ):

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

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

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