3

Silverlight 要素内の XML ファイルを開いて編集しようとしていますが、編集できません。

私の XML ファイル (Customers.xml) は次のようになります。

<?xml version="1.0"?>
<customers>
  <customer>Joe</customer>
  <customer>Barrel</customer>
</customers>

そして私のC#ロジック:

[...]

XDocument xdoc = XDocument.Load("Customers.xml");
            xdoc.Root.Add(new XElement("customer", "Stephano")); //here I wish it to add Stephano as a customer.
            using (var file = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (var stream = file.OpenFile("Customers.xml", FileMode.Create))
                {
                    xdoc.Save(stream); //and here I wish it to save it to the file
                }
            }

PopulateCustomersList();

/\ これは XML ファイルの内容を表示するために使用される関数です。

private void PopulateCustomersList()
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.XmlResolver = new XmlXapResolver();
            XmlReader reader = XmlReader.Create("Customers.xml");
            reader.MoveToContent();

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element && reader.Name == "customer")
                {
                    //OutputTextBlock.Text = reader.GetAttribute("first");
                    customersList.Items.Add(new ListBoxItem()
                    {
                        Content = reader.ReadInnerXml()
                    });
                }

                if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "customers")
                {
                    break;
                }
            }

            reader.Close();
        }

私のxamlファイルには

<ListBox x:Name="customersList" />

表示されますが、問題は、ジョーとバレルしか表示されず、ステファノはどこですか?

さまざまなチュートリアルやフォーラムからこのコードを入手しましたが、よくわかりません。それを行うには奇妙な方法かもしれませんが、その方法を見つけることができず、あらゆる種類のことを試しています. 最も面白いのは、多くのフォーラムでファイルを保存する方法を見つけたことです。これは次のように xdoc.Save("Customers.xml");なります。それがファイルであることをどのように彼に伝えるべきですか?

4

1 に答える 1

0

わかった:

.Save() は現在の XDocument を保存します。つまり、ここで読み込んだ XML ファイルを保存します。

XDocument xdoc = XDocument.Load("Customers.xml");

したがって、次のようになります(これは、提供した以上の知識なしでコーディングされています)

XDocument xdoc = XDocument.Load("Customers.xml");
        xdoc.Root.Add(new XElement("customer", "Stephano"));
xdoc.Save();
PopulateCustomersList(xdoc);

private void PopulateCustomersList(XDocument xdoc)
     {
         foreach(XElement in element xdoc.Root.Elements("customer"))
         {
            customersList.Items.Add(new ListBoxItem()
             {
                Content = (string)element;
             }
         }
     }
于 2012-11-05T16:30:35.343 に答える