如何在XmlDocument中插入DOCTYPE元素
本文关键字:插入 DOCTYPE 元素 XmlDocument | 更新日期: 2023-09-27 17:58:30
我有一些生产代码,它以以下方式生成XML文件:
- 通过对具有XmlAttributes的类的实例使用XmlSerializer生成字符串
- 使用LoadXml()和步骤1中生成的字符串生成XmlDocument
- 使用XmlWriter包装StringWriter写入文件
现在要求包含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?
也许转换中需要更多的步骤,但在序列化时,可以使用如下配置的XmlWriterSettings
实例来删除xml声明。
var iSettings = new XmlWriterSettings{ OmitXmlDeclaration = true };
感谢Codor的回答和讨论,尽管我的代码看起来与问题中的代码非常不同,但它帮助我弄清楚了这一点。
我的XmlDocument也有一个XML声明,所以这对我有效:
XmlDocument doc = new XmlDocument();
doc.Load(templateFilename);
doc.InsertAfter(doc.CreateDocumentType("html", null, null, null), doc.FirstChild);
否则,我想我会使用PrependChild()
而不是InsertAfter()
。