使用XmlWriter创建xml文件

本文关键字:文件 xml 创建 XmlWriter 使用 | 更新日期: 2023-09-27 18:26:40

我在XmlWriter中的Create方法有问题。

即使我使用msdn中的示例,它也不会起作用。http://msdn.microsoft.com/en-us/library/kcsse48t.aspx

我为一个windows商店应用程序创建了一个"空白页"项目。在其中,我插入了msdn中的示例代码,以测试XmlWriter类的工作方式。

VS给了我错误:

Cannot resolve method 'Create(string)', candidates are: 
System.Xml.XmlWriter Create(System.IO.Stream) (in class XmlWriter)
System.Xml.XmlWriter Create(System.IO.TextWriter) (in class XmlWriter)
System.Xml.XmlWriter Create(System.Text.StringBuilder) (in class XmlWriter)
System.Xml.XmlWriter Create(System.Xml.XmlWriter) (in class XmlWriter)

这在控制台应用程序中没有问题。但我需要做一个windows商店应用程序。

我最终希望做的是添加到现有的xml文件中。

有人能告诉我为什么这不起作用,或者如何以不同的方式实现我的目标吗。

谢谢你抽出时间。

编辑:

对不起,我的代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Xml;
using System.Xml.Linq;
using Windows.Data.Xml.Dom;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
namespace DatabaseTest
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void button_submit_Click(object sender, RoutedEventArgs e)
        {
            using (XmlWriter writer = XmlWriter.Create("output.xml"))
            {
                writer.WriteStartElement("book");
                writer.WriteElementString("price", "19.95");
                writer.WriteEndElement();
                writer.Flush();
            }
        }
    }
}

使用XmlWriter创建xml文件

这是一个Windows应用商店应用程序,不是吗?编辑你的问题标签并尝试这个:

StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("output.xml", CreationCollisionOption.ReplaceExisting);
using (IRandomAccessStream writeStream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
  System.IO.Stream s =  writeStream.AsStreamForWrite();
  System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
  settings.Async = true;
  using (System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(s, settings))
  {
    // Do stuff...
    await writer.FlushAsync();
  }
}

一旦知道名称空间限定符有效,就可以删除它。

检查此项以了解如何在Windows应用商店中存储文件。也可以看看这个样品。我的代码将使用本地应用程序文件夹,例如:C:'Users'[name]'AppData'Local'Packages'[appName]'LocalState'

这可能会有所帮助,

 using (XmlWriter writer = XmlWriter.Create("employees.xml"))
    {
        writer.WriteStartDocument();
        writer.WriteStartElement("Employees");
        foreach (Employee employee in employees)
        {
        writer.WriteStartElement("Employee");
        writer.WriteElementString("ID", employee.Id.ToString());   // <-- These are new
        writer.WriteElementString("FirstName", employee.FirstName);
        writer.WriteElementString("LastName", employee.LastName);
        writer.WriteElementString("Salary", employee.Salary.ToString());
        writer.WriteEndElement();
        }
        writer.WriteEndElement();
        writer.WriteEndDocument();
    }

尝试在您的button_submit_Click方法内部使用,但不使用。适用于我:

XmlWriter writer = XmlWriter.Create("output.xml"));
writer.WriteStartElement("book");
writer.WriteElementString("price", "19.95");
writer.WriteEndElement();
writer.Flush();

因为您写道:我为windows商店应用程序创建了一个"空白页面"项目。问题是适用于Windows应用商店应用的可移植类库.NET中不支持方法。如果比较文档中的Create(Stream)和Create(string)版本信息,您会发现所选框架中不支持Create(string)。

在Visual Studio中,进入视图菜单,然后选择Object Browser

在左侧窗格中查找System.Xml,并浏览以下

1. System.Xml
    - System.Xml
       - XmlWriter

现在单击XmlWriter,右侧窗格将显示该类型的所有方法。查找Create方法并查看有哪些过载可用。你应该像我一样看到Create(string)。如果没有,那么老实说,我不确定这里发生了什么。可能是您正在使用不同的.NET Framework,如可移植类库或其他什么???

编辑:

你可以使用

using (XmlWriter writer = XmlWriter.Create("output.xml", new XmlWriterSettings()))

所以至少你可以继续你的工作。