许多.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的?
这里的至少一个解决方案:
XmlDocument doc = new XmlDocument();
using (XmlWriter writer = doc.CreateNavigator().AppendChild())
{
// Do this directly
writer.WriteStartDocument();
writer.WriteStartElement("root");
writer.WriteElementString("foo", "bar");
writer.WriteEndElement();
writer.WriteEndDocument();
// or anything else you want to with writer, like calling functions etc.
}
显然XPathNavigator的给你,当你调用的appendChild一个XmlWriter的()
积分去马丁Honnen上: http://groups.google.com/group/microsoft.public.dotnet.xml/browse_thread/thread/24e4c8d249ad8299?pli=1
你可以做相反:打造XmlDocument
第一使用DOM,然后将其写入到一个XmlWriter
:
XmlDocument xdoc = new XmlDocument();
... // build the document
StringWriter S = new StringWriter();
XmlWriter xw = XmlWriter.Create(S);
xdoc.WriteTo(xw);
您可以使用的XMLWriter类编写XML文件。 下面是例子这一点。
XmlWriterSettings objSetting = new XmlWriterSettings();
objSetting.Indent = true;
objSetting.NewLineOnAttributes = true;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
using (XmlWriter objWriter = XmlWriter.Create(sb, objSetting))
{
//Note the artificial, but useful, indenting
objWriter.WriteStartDocument();
objWriter.WriteStartElement("books");
////////Start Book Element///////
objWriter.WriteStartElement("book");
objWriter.WriteStartAttribute("ISBN");
objWriter.WriteValue("asp1");
objWriter.WriteEndAttribute();
objWriter.WriteStartElement("Title");
objWriter.WriteValue("ASP.NET");
objWriter.WriteEndElement();
objWriter.WriteElementString("ReleaseDate", "11/11/2010");
objWriter.WriteStartElement("Pages");
objWriter.WriteValue(200);
objWriter.WriteEndElement(); //price
objWriter.WriteEndElement(); //book
////////End Book Element///////
////////Another Element
////////Start Book Element///////
objWriter.WriteStartElement("book");
objWriter.WriteStartAttribute("ISBN");
objWriter.WriteValue("c#2");
objWriter.WriteEndAttribute();
objWriter.WriteStartElement("Title");
objWriter.WriteValue("C#.NET");
objWriter.WriteEndElement();
objWriter.WriteElementString("ReleaseDate", "10/11/2010");
objWriter.WriteStartElement("Pages");
objWriter.WriteValue(500);
objWriter.WriteEndElement();
objWriter.WriteEndElement(); //book
////////End Book Element///////
objWriter.WriteEndElement(); //books
objWriter.WriteEndDocument();
}
File.WriteAllText(Server.MapPath("BooksList.xml"), sb.ToString());
背后的XmlWriter的想法是等到您完成修改您的数据再动笔。
XmlWriter的是没有考虑到自己的情况建立。
或
要么
有一个潜在的Stream对象的XmlWriter的是写,如果是双向(MemoryStream的),你可以简单地重新定位回-0-,然后使用Stream对象在XMLDocument.load方法(流)。
HTH,
同