#freeze
[[.NET]]


これ、解決法はいくらでもあるわよね。そのひとつを考えてみましょう。

たとえば、とあるツールでアクセス先のURLを保管したいとするわよね。次回起動時には続きからできると。

まず、サイトオブジェクトをこうするの。

    class Site
    {
        public string title;
        public string url;
    }

サイトにアクセスするたびにこのデータを配列にして蓄積するわけよね。

* 保存 [#w855bd18]

で、保存はこんな感じかな?

        static XmlDocument getXml(List<Site> s){
            XmlDocument document = new XmlDocument();
            XmlDeclaration declaration = document.CreateXmlDeclaration("1.0", "UTF-8", null);  // XML宣言
            XmlElement root = document.CreateElement("Setup");  // ルート要素
            document.AppendChild(declaration);
            document.AppendChild(root);
            foreach (Site d in s)
            {
                XmlElement element = document.CreateElement("item");
                element.InnerText = d.url;                  // 要素の内容
                element.SetAttribute("title", d.title);  // 属性
                Console.WriteLine("{0}:{1}", d.title, d.url);
                root.AppendChild(element);
            }
            return (document);
        }
        /// <summary>
        /// サイト名とURLを、Siteオブジェクトにして返す。
        /// </summary>
        /// <param name="title"></param>
        /// <param name="url"></param>
        /// <returns>Site</returns>
        static Site getSite(string title, string url)
        {
            Site r  = new Site();
            r.title = title;
            r.url = url;
            return (r);
        }

上記を以下のようにして使うわけ。

まず、データ追記はこんな感じ。

            List<Site> s = new List<Site>();
            s.Add(getSite("Google","http://www.google.co.jp/"));
            s.Add(getSite("Yahoo!Japan","http://www.yahoo.co.jp/"));

そんで、XML変換はこんな感じ。

            XmlDocument document = getXml(s);

すると、保存はこうなるわね。

            // ファイルに保存する
            document.Save("../sample.xml");

* 読み出し [#a8ab28d0]

逆に読みだすにはこうするの。

            // ファイルから読みだす。
            XmlDocument doc2 = new XmlDocument();
            doc2.Load("../sample.xml");
            foreach (XmlElement element in doc2.DocumentElement)
            {
                string text = element.InnerText;                         // 要素の内容
                string attribute = element.GetAttribute("title");  // 属性
                Console.WriteLine("Loaded:{0} : {1}", attribute, text);
            }
            //
            Console.WriteLine("何か押せば終わりです。");
            Console.ReadLine(); // last

うん。

ちなみに読み書きした sample.xml は、以下のようになるわ。

  <?xml version="1.0" encoding="UTF-8"?>
  <Setup>
    <item title="Google">http://www.google.co.jp/</item>
    <item title="Yahoo!Japan">http://www.yahoo.co.jp/</item>
  </Setup>

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS