如何在XmlDocument中插入DOCTYPE元素

时间:2014-04-16 09:25:56

标签: c# .net xml

我有一些生产代码,它以下列方式生成XML文件:

  1. 使用XmlSerializer和带有XmlAttributes的类的实例生成字符串
  2. 使用LoadXml()生成XmlDocument,其中包含在步骤1中生成的字符串
  3. 使用XmlWriter包装StringWriter
  4. 写入文件

    现在需要包含DOCTYPE声明。我想尽可能少地对代码进行更改。

    到目前为止,我设法做到这一点的唯一方法是:

    tx.WriteDocType("entitytype", null, "http://testdtd/entity.dtd", null);                    
    foreach (XmlNode node in document)
    {
      if (node.NodeType == XmlNodeType.XmlDeclaration)
      {
        document.RemoveChild(node);
      }
    }
    document.WriteTo(tx); 
    

    这似乎有点像黑客 - 有没有更好的方法可以插入DOCTYPE声明?特别是有一种方法可以避免在LoadXml()调用生成的XmlDocument中使用XmlDeclaration吗?

2 个答案:

答案 0 :(得分:1)

转换中的步骤可能是必要的,但在序列化时,可以使用XmlWriterSettings的实例删除xml声明。

var iSettings = new XmlWriterSettings{ OmitXmlDeclaration = true };

答案 1 :(得分:0)

感谢科多尔(Codor)的回答和讨论,即使我的代码看上去与问题代码完全不同,它也帮助我弄清了这一点。

我的XmlDocument也有一个XML声明,所以这对我有用:

XmlDocument doc = new XmlDocument();
doc.Load(templateFilename);
doc.InsertAfter(doc.CreateDocumentType("html", null, null, null), doc.FirstChild);

否则,我想我会使用PrependChild()而不是InsertAfter()