#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>