[C#] XMLの読み書き

まず、読み書きするXMLは以下の感じ。

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <Setup>
    <clipboard>true</clipboard>
    <url>http://feed.japan.cnet.com/rss/index.rdf</url>
    <debug>false</debug>
    <oldies>
      <item>
        <title>CNET Japan 最新情報 総合</title>
        <url>http://feed.japan.cnet.com/rss/index.rdf</url>
      </item>
      <item>
        <title>スラッシュドット・ジャパン</title>
        <url>http://slashdot.jp/slashdotjp.rss</url>
      </item>
      <item>
        <title>GIGAZINE</title>
        <url>http://feed.rssad.jp/rss/gigazine/rss_2.0</url>
      </item>
      <item>
        <title>Lifehack</title>
        <url>http://itlifehack.jp/feed</url>
      </item>
      <item>
        <title>NHKニュース(3)</title>
        <url>http://www3.nhk.or.jp/rss/news/cat3.xml</url>
      </item>
      <item>
        <title>NHKニュース(1)</title>
        <url>http://www3.nhk.or.jp/rss/news/cat1.xml</url>
      </item>
      <item>
        <title>NHK総合</title>
        <url>http://www3.nhk.or.jp/rss/news/cat0.xml</url>
      </item>
    </oldies>
  </Setup>
</root>

これを読み込むコードは以下。実働しているものだが、GUIパーツは適当に。

        /// <summary>
        /// 設定ファイルを読みだして復元する。
        /// </summary>
        /// <param name="fn"></param>
        private void loadData(string fn)
        {
            string filename = search_File(fn);
            if (File.Exists(filename) == true)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(filename);
                XmlNodeList nodeList;
                XmlNode root = doc.DocumentElement;
                // 行選択

                nodeList = root.SelectNodes("Setup");

                foreach (XmlNode nd in nodeList)
                {
                    string wk = getElementByTagName(nd, "clipboard");
                    if (wk == "true")
                    {
                        checkBox1.IsChecked = true;
                    }

                    wk = getElementByTagName(nd, "url");
                    if (wk != "")
                    {
                        textBox1.Text = wk;
                    }

                    wk = getElementByTagName(nd, "debug");
                    if (wk == "true")
                    {
                        debug = true;
                    }
                    else
                    {
                        debug = false;
                    }

                    XmlNode nnd2 = nd.SelectNodes("oldies")[0];
                    if (nnd2 != null)
                    {
                        XmlNodeList xs2 = nnd2.SelectNodes("item");
                        News nn = new News();
                        foreach (XmlNode n2d in xs2)
                        {
                            nn.url = getElementByTagName(n2d, "url");
                            nn.title = getElementByTagName(n2d, "title");
                            string[] ss = {nn.url, nn.title};
                            oldview.Items.Add(ss);
                        }
                    }
                }
            }
        }

        //
        // 指定エレメントの中身を表示する。
        //
        private string getElementByTagName(XmlNode n, string name)
        {
            string r = null;
            foreach (XmlNode no in n.ChildNodes)
            {
                if (name.CompareTo(no.Name) == 0)
                {
                    r = no.InnerText;
                    break;
                }
            }
            return (r);
        }

んで、書き込みサンプルは以下。

        /// <summary>
        /// 必要な設定を集め、XML化して保存する。
        /// </summary>
        /// <param name="fn">file名</param>
        private void saveData(string fn)
        {
            string filename = search_File(fn);
            XmlDocument doc = new XmlDocument();
            XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
            XmlElement root = doc.CreateElement("root");
            doc.AppendChild(dec);
            doc.AppendChild(root);

            XmlElement setup = doc.CreateElement("Setup");
            root.AppendChild(setup);

            XmlElement element = doc.CreateElement("clipboard");
            if (checkBox1.IsChecked == true)
            {
                element.InnerText = "true";
            }
            else
            {
                element.InnerText = "false";
            }
            setup.AppendChild(element);

            // test
            if (checkBox1.IsChecked == true)
            {
                //
            }
            //

            element = doc.CreateElement("url");
            element.InnerText = textBox1.Text;
            setup.AppendChild(element);

            element = doc.CreateElement("debug");
            if (checkdebug.IsChecked == true)
            {
                element.InnerText = "true";
            }
            else
            {
                element.InnerText = "false";
            }
            setup.AppendChild(element);

            // urls2
            XmlElement oldies = doc.CreateElement("oldies");
            if (oldview.Items.Count > 0)
            {
                for (int i = 0; i < oldview.Items.Count; i++)
                {
                    string[] sss = (string[]) oldview.Items[i];

                    XmlElement elem = doc.CreateElement("item");
                    element = doc.CreateElement("title");
                    element.InnerText = (string)sss[1];
                    //ListViewItem lvi = (ListViewItem)oldview.Items[i];
                    elem.AppendChild(element);

                    element = doc.CreateElement("url");
                    element.InnerText = (string)sss[0];
                    elem.AppendChild(element);

                    oldies.AppendChild(elem);

                }
            }
            setup.AppendChild(oldies);

            doc.Save(filename);
        }

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)