Как я могу сохранить в XML? - PullRequest
3 голосов
/ 16 ноября 2011

В настоящее время я создаю новое приложение WP7, которое должно позволить пользователям заполнить два текстовых поля, нажать кнопку и сделать содержимое частью файла .XML.

На данный момент я использую следующий код:

string ItemName = ItemNameBox.Text;
string ItemAmount= ItemAmountBox.Text;

string xmlString = "<Items><Name>"+ItemName+"</Name></Item>";
XDocument document = XDocument.Parse(xmlString);
document.Root.Add(new XElement("Amount", ItemAmount));
string newxmlString = document.ToString();

MessageBox.Show(newxmlString);

Теперь, когда я нажимаю кнопку (так как это происходит в событии кнопки onclick), MessageBox показывает мне, что вывод корректен в XML-формате.

Однако как мне получить это в существующей XML-схеме, которая должна содержать несколько строк (например, список дел / покупок)?

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

Это общая заставка, которую я написал для Windows Phone.

public static void SaveDataToIsolatedStorage(string filePath, FileMode fileMode, XDocument xDoc)
{
    using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
    using (IsolatedStorageFileStream location = new IsolatedStorageFileStream(filePath, fileMode, storage))
    {
        System.IO.StreamWriter file = new System.IO.StreamWriter(location);
        xDoc.Save(file);
    }
}
2 голосов
/ 17 ноября 2011

Если вы хотите добавить несколько «строк» ​​данных, вы можете сделать это следующим образом:

// create XML element representing one "Item", containing a "Name" and an "Amount" 
// and add it to the given parent element
private void AddItem(XElement parent, string itemName, int amount)
{
    // create new XML element for item
    XElement newItem = new XElement("Item");
    // add the name
    newItem.Add(XElement.Parse("<Name>" + itemName + "</Name>"));
    // add the amount
    newItem.Add(XElement.Parse("<Amount>" + amount + "</Amount>"));
    // add to parent XML element given by caller
    parent.Add(newItem);
}

private void button1_Click(object sender, RoutedEventArgs e)
{
    // create new document (in your case you would do this only once, 
    // not on every button click)
    XDocument doc = XDocument.Parse("<Items />");

    // doc.Root is <Items /> - lets add some items
    AddItem(doc.Root, "My item", 42);
    AddItem(doc.Root, "Another item", 84);

    // check if we succeeded (of course we did!)
    Debug.WriteLine(doc.ToString());
}

AddItem можно вызывать несколько раз, и каждый вызов добавляет один элемент в ваш элемент ,Вы будете вызывать его каждый раз, когда пользователь нажимает кнопку.

Структура вашего XML выглядит следующим образом:

<Items>
  <Item>
    <Name>My item</Name>
    <Amount>42</Amount>
  </Item>
  <Item>
    <Name>Another item</Name>
    <Amount>84</Amount>
  </Item>
</Items>

Редактировать:

И для сохранения и загрузкиXML в / из изолированного хранилища:

using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("myfile.xml", System.IO.FileMode.Create, isf))
    {
        doc.Save(stream);
    }
}


using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream("myfile.xml", System.IO.FileMode.Open, isf))
    {
        doc = XDocument.Load(stream);
    }
}
0 голосов
/ 16 ноября 2011

Я думаю, что это лучший и правильный способ написания XML-файла. Вы можете использовать этот фрагмент в цикле написать весь XML, который вы хотите

IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream
XmlWriterSettings settings = new XmlWriterSettings();        
settings.Indent = true;   
XmlWriter writer = new XmlWriter(isoStream, settings);



        writer.Formatting = Formatting.Indented;
        writer.Indentation = 3;
        writer.WriteStartDocument();
        writer.WriteStartElement("elementName");

        writer.WriteAttributeString("attName", "value");
        writer.WriteValue("value of elem");
        writer.WriteEndElement();
        writer.WriteEndDocument();
        writer.Close();            
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...