如何创建.NET中使用的XmlWriter一个XmlDocument的?(How to create

2019-07-04 00:11发布

许多.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的?

Answer 1:

这里的至少一个解决方案:

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



Answer 2:

你可以做相反:打造XmlDocument第一使用DOM,然后将其写入到一个XmlWriter

XmlDocument xdoc = new XmlDocument();
... // build the document

StringWriter S = new StringWriter();
XmlWriter xw = XmlWriter.Create(S);
xdoc.WriteTo(xw);


Answer 3:

您可以使用的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());


Answer 4:

背后的XmlWriter的想法是等到您完成修改您的数据再动笔。

XmlWriter的是没有考虑到自己的情况建立。

  • 等到你知道你的数据将是写入前

要么

  • 你现在正在做什么


Answer 5:

有一个潜在的Stream对象的XmlWriter的是写,如果是双向(MemoryStream的),你可以简单地重新定位回-0-,然后使用Stream对象在XMLDocument.load方法(流)。

HTH,



文章来源: How to create a XmlDocument using XmlWriter in .NET?