2014-10-16 4 views
4

У меня возникают проблемы с методом Create в XmlWriter.Создать xml-файл с XmlWriter

Даже когда я использую пример из msdn, он не будет работать. http://msdn.microsoft.com/en-us/library/kcsse48t.aspx

Я создал проект «Пустая страница» для приложения для магазина Windows. В нем, ive вставил пример кода из 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-файл.

Может кто-нибудь сказать мне, почему это не работает или как достичь моей цели по-другому.

Спасибо за ваше время.

EDIT:

К сожалению, мой код:

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(); 
      } 
     } 
    } 
} 
+2

Показать Ваш код. –

+2

и полное сообщение об ошибке – Vladimirs

+0

К сожалению, добавлен мой код. –

ответ

1

Это приложение для Windows Store, не так ли? Измените свои теги вопроса и попробуйте:

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 Store, отметьте this. Также посмотрите на this для образцов. Мой код будет использовать Local App Folder, то есть что-то вроде: C:\Users\[name]\AppData\Local\Packages\[appName]\LocalState\

+0

Да. Это приложение для магазина Windows. Ive использовал только C# в течение месяца или около того, поэтому я не знал, что это имело значение. Кроме того, ваше решение, похоже, работает. Однако файл не отображается. В поле 'code' // do stuff' code', я помещаю содержимое 'code'writer.WriteStartElement'code' из примера msdn –

+0

Файл будет сохранен в вашей локальной папке хранения, например. «C: \ Users \\ [name] \ AppData \ Local \ Packages \\ [appName] \ LocalState \" –

+0

Я обновил свой ответ, чтобы включить ссылку о хранилище файлов в приложениях Windows Store. –

0

Это может быть полезным,

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(); 
    } 
+0

Благодарим вас за предложение. Однако это дает мне точный результат. Вы тестируете в консольном приложении? –

+0

Да, и он работает плавно в консольном приложении, попробуйте использовать это, XmlTextWriter w = new XmlTextWriter («test.xml», Encoding.UTF8); w.WriteStartElement ("root"); w.WriteAttributeString ("xmlns", "x"); w.WriteStartElement ("item1"); w.WriteEndElement(); w.WriteStartElement ("item2"); w.WriteEndElement(); или используйте эту ссылку http://stackoverflow.com/questions/24615574/windows-8-store-app-xmlwriter-does-not-write-anything-to-file – LostCoder

+0

"Не удается разрешить символ XmlTextWriter" –

0

Попробуйте использовать внутри вашего метода button_submit_Click немного изменилось, как это без using. Работы для меня:

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

Благодарим за предложение. Однако это дает мне точный результат. Вы тестируете в консольном приложении? –

+0

Nope. Попробуем PLZ, и я скажу вам –

+0

Я попробовал консольное приложение, и сборка в порядке. Какова ваша структура? Visual studio? –

0

В Visual Studio попал в Посмотреть меню и выберите браузер Object.

Посмотрите на System.Xml в левой панели и перейдите следующие

1. System.Xml 
    - System.Xml 
     - XmlWriter 

Теперь нажмите на XmlWriter, и в правой части окна будут показаны все методы этого типа. Найдите метод Create и посмотрите, какие перегрузки доступны. Вы должны увидеть Create(string), как и я. Если нет, то, честно говоря, я не уверен, что здесь происходит. Может быть, вы используете другую .NET Framework, такую ​​как Portable Class Library или что-то в этом роде ???

EDIT:

Вы могли бы просто использовать

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

так по крайней мере, вы можете продолжать свою работу.

+0

На самом деле, я не вижу Create (String). У меня есть .net 4.5 и 4.5.1 –

+0

Спасибо за предложение, но 'using (XmlWriter writer = XmlWriter.Create (" output.xml ", новый XmlWriterSettings()))' дает ту же ошибку, что и мой исходный код –

0

Поскольку Вы писали: я создал «Пустая страница» проект для окон Маркете. Проблема заключается в том, что метод не поддерживается в Portable Class Library .NET для приложений Windows Store. Если вы сравниваете Create(Stream) и Create(string) информацию о версии в документации, вы увидите, что Create (string) не поддерживается в выбранной структуре.

+0

Can i исправить это? Если да, то как? –

Смежные вопросы