我有一些生产代码,它以下列方式生成XML文件:
现在需要包含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吗?
答案 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()
。