当创建了这样一个System.Xml.Linq.XDocument一个文档类型:
doc.AddFirst(new XDocumentType("html", null, null, null));
得到的保存XML文件的开头为:
<!DOCTYPE html >
注意结束尖括号前的额外的空间。 我怎样才能防止这种情况出现的空间? 我想要一个干净的方式,如果可能的:)
当创建了这样一个System.Xml.Linq.XDocument一个文档类型:
doc.AddFirst(new XDocumentType("html", null, null, null));
得到的保存XML文件的开头为:
<!DOCTYPE html >
注意结束尖括号前的额外的空间。 我怎样才能防止这种情况出现的空间? 我想要一个干净的方式,如果可能的:)
一种方法是编写一个包装类的的XmlWriter。 所以:
XmlWriter writer = new MyXmlWriterWrapper(XmlWriter.Create(..., settings))
然后为MyXmlWriterWrapper类定义的XmlWriter类接口上的每个方法直通到包裹作家传递呼叫,除了WriteDocType方法。 然后,您可以定义为是这样的:
public override void WriteDocType(string name, string pubid, string sysid, string subset)
{
if ((pubid == null) && (sysid == null) && (subset == null))
{
this.wrappedWriter.WriteRaw("<!DOCTYPE HTML>");
}
else
{
this.wrappedWriter.WriteDocType(name, pubid, sysid, subset);
}
}
还不是一个特别干净的解决方案无可否认,但它会做的工作。
如果你写一个XmlTextWriter你没有得到的空间:
XDocument doc = new XDocument();
doc.AddFirst(new XDocumentType("html", null, null, null));
doc.Add(new XElement("foo", "bar"));
using (XmlTextWriter writer = new XmlTextWriter("c:\\temp\\no_space.xml", null)) {
writer.Formatting = Formatting.Indented;
doc.WriteTo(writer);
writer.Flush();
writer.Close();
}
我可能是错的,但我认为这个空间,因为有更多的参数预计HTML后。 虽然HTML5允许它。
尝试指定至少所述第三参数,以及(* .dtd)。 或做这样的事情:
new XDocumentType("html", "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd", null)