许多.NET函数使用XmlWriter来输出/生成xml。将输出到文件/字符串/内存中是一个非常重要的操作:
XmlWriter xw = XmlWriter.Create(PutYourStreamFileWriterEtcHere);
xw.WriteStartElement("root");
...
有时候,您需要操作生成的Xml,因此希望将其加载到XmlDocument中,或者出于其他某种原因需要XmlDocument,但必须使用XmlWriter生成XML。例如,如果调用一个仅输出到XmlWriter的第三方库中的函数。你可以做的其中一件事是将xml写入字符串,然后将其加载到XmlDocument中:
StringWriter S = new StringWriter();
XmlWriter xw = XmlWriter.Create(S);
/* write away */
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(S.ToString());
然而这种方法效率低下——首先需要将所有的XML信息序列化为字符串,然后再解析该字符串以创建DOM。
如何使XmlWriter直接构建XmlDocument?
XmlWriter
将具有Document
的一致性级别,因此如果您将其作为 XSL 变换的输入(并且您不是创建完整文档),则可以使用new XmlDocument().CreateFragment().CreateNavigator()
来代替。 - harpoDOCTYPE
。不确定是否有解决方法。 - harpoXmlDocument
,而不必经过字符串或流的处理。一个有用的示例:将任意 WPF 运行时实例直接转换为它所根源的XAML
对象图形的XmlDocument
表示:var xd = new XmlDocument(); var w = xd.CreateNavigator().AppendChild(); XamlWriter.Save(inst, new XamlDesignerSerializationManager(w) { XamlWriterMode = XamlWriterMode.Expression });
(请确保使用System.Windows.Markup
中的XamlWriter
)。这显然使其他替代方案看起来非常笨拙。太棒了! - Glenn Slayden