青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Zachary.XiaoZhen - 夢想的天空

Linq to Xml 小結

Linq to xml 這個東西出來好多年了,但一直沒有機會在項目中用到,前段時間,終于項目中一些地方需要用到xml作為數據源,于是就體驗了一把這個,感覺還挺不錯的,今天在此小結一下.

       首先我們來模擬一下一個真實的業務場景:在這里我們需要展示一個火車站上各個站臺上面燈光開關狀態.假設每個站臺一共6個開關,站臺我們用Station節點表示,站臺開關我們用SwitchNo來表示,在初始化(即默認狀態)的時候,我們需要表示成第一個站臺2個開關開著,第二個站臺3個開關開著,第三個站臺4個開關開著….

    那么我們可能需要的一個xml文件格式可能就是如下這個樣子: 

<?xml version="1.0" encoding="utf-8"?>
<Stations>
  <Station Id="1">
    <SwitchNo Id="1">1</SwitchNo>
    <SwitchNo Id="2">1</SwitchNo>
    <SwitchNo Id="3">0</SwitchNo>
    <SwitchNo Id="4">0</SwitchNo>
    <SwitchNo Id="5">0</SwitchNo>
    <SwitchNo Id="6">0</SwitchNo>
  </Station>
  <Station Id="2">
    <SwitchNo Id="1">1</SwitchNo>
    <SwitchNo Id="2">1</SwitchNo>
    <SwitchNo Id="3">1</SwitchNo>
    <SwitchNo Id="4">0</SwitchNo>
    <SwitchNo Id="5">0</SwitchNo>
    <SwitchNo Id="6">0</SwitchNo>
  </Station>
  <Station Id="3">
    <SwitchNo Id="1">1</SwitchNo>
    <SwitchNo Id="2">1</SwitchNo>
    <SwitchNo Id="3">1</SwitchNo>
    <SwitchNo Id="4">0</SwitchNo>
    <SwitchNo Id="5">0</SwitchNo>
    <SwitchNo Id="6">0</SwitchNo>
  </Station>
  <Station Id="4">
    <SwitchNo Id="1">0</SwitchNo>
    <SwitchNo Id="2">0</SwitchNo>
    <SwitchNo Id="3">1</SwitchNo>
    <SwitchNo Id="4">1</SwitchNo>
    <SwitchNo Id="5">0</SwitchNo>
    <SwitchNo Id="6">0</SwitchNo>
  </Station>
  <Station Id="5">
    <SwitchNo Id="1">1</SwitchNo>
    <SwitchNo Id="2">1</SwitchNo>
    <SwitchNo Id="3">1</SwitchNo>
    <SwitchNo Id="4">1</SwitchNo>
    <SwitchNo Id="5">1</SwitchNo>
    <SwitchNo Id="6">0</SwitchNo>
  </Station>
  <Station Id="6">
    <SwitchNo Id="1">1</SwitchNo>
    <SwitchNo Id="2">1</SwitchNo>
    <SwitchNo Id="3">1</SwitchNo>
    <SwitchNo Id="4">1</SwitchNo>
    <SwitchNo Id="5">1</SwitchNo>
    <SwitchNo Id="6">1</SwitchNo>
  </Station>
</Stations>

 

下面我們就從xml數據的創建/查詢/修改這三個方面簡單談一下吧.關于概念啥的就不啰嗦了,直接上代買吧.

1. 創建這個文件

/// <summary>
        /// 創建xml文件
        /// </summary>
        private void writeStationXmlData()
        {            
            string fileName = Path.Combine(dataPath, "StationWitch.xml");

            if (!Directory.Exists(dataPath))
                Directory.CreateDirectory(dataPath);

            if (File.Exists(fileName))
                return;

            var stationEleList = new List<XElement>();  //臨時緩存每個站臺節點

            //一共6個站臺,循環創建           
            for (int i = 1; i < 7; i++)
            {
                var xAttr = new XAttribute("Id", i);

                //臨時緩存每個每個站臺下的開關狀態
                var childList = new List<XElement>();       
                for (int j = 1; j < 7; j++)
                {
                    childList.Add(new XElement("SwitchNo", new XAttribute("Id", j), i >= j ? 1 : 0));
                }

                //構建一個站臺節點
                var stationEle = new XElement("Station", xAttr, childList.ToArray());
                stationEleList.Add(stationEle);
            }

            //構建Stations節點
            XElement xBody = new XElement("Stations", stationEleList.ToArray());

            //構建整個文檔
            XDocument doc = new XDocument(
                    new XDeclaration("1.0", "utf-8", "yes"), xBody);
            doc.Save(fileName);
        }

2. 讀取當前xml 文件并轉化為友好的類型

/// <summary>
        /// 查詢讀取每個站臺的開關狀態并轉化為keyValue鍵值對
        /// </summary>
        /// <returns></returns>
        public IList<KeyValue<int, int>> GetStationLightData()
        {
            writeStationXmlData();
            if (stationLightData == null)
            {
                stationLightData = new List<KeyValue<int, int>>();
                stationSwitchStatus = new List<KeyValue<int, bool>>();                

                //加載xml
                string fileName = Path.Combine(dataPath, "StationWitch.xml");
                XElement doc = XElement.Load(fileName);

                //讀取站臺列表
                var station = from s in doc.Descendants("Station")
                              select s;
                //遍歷站臺
                foreach (var st in station)
                {
                    //獲取每個站臺的開關集合 即SwitchNo節點
                    var st_switchs = st.Elements("SwitchNo");
                    var stationId = int.Parse(st.Attribute("Id").Value);
                    int light = 0;
                    foreach (var sw in st_switchs)
                    {
                        var swithNo = int.Parse(sw.Attribute("Id").Value);
                        bool isOn = sw.Value == "1";
                        if (isOn)
                            light += 20;
                        stationSwitchStatus.Add(new KeyValue<int, bool>(stationId, isOn, swithNo));
                    }
                    stationLightData.Add(new KeyValue<int, int>(stationId, light));
                }
            }
            return stationLightData;
        }

3.更新節點值(先查詢找到指定的節點 在更新后保存)

 /// <summary>
        /// 更新制定站臺中的指定開關的狀態,即更新制定Station->SwitchNo節點下值
        /// </summary>
        /// <param name="station"></param>
        /// <param name="switchNo"></param>
        /// <param name="isOn"></param>
        public void UpdateStationSwitchStatus(int station, int switchNo, bool isOn)
        {
            string fileName = Path.Combine(dataPath, "StationWitch.xml");
            //讀取數據
            XElement doc = XElement.Load(fileName);
            var up_station = doc.Descendants("Station")
                .Where(o => o.Attribute("Id").Value == station.ToString()).FirstOrDefault();

            //找出指定的節點
            var upSwitch = up_station.Elements("SwitchNo").FirstOrDefault(o => o.Attribute("Id").Value == switchNo.ToString());

            //更新
            if (upSwitch != null)
            {
                upSwitch.Value = isOn ? "1" : "0";
            }

            //保存為文件
            lock (sync)
            {
                doc.Save(fileName);
            }
        }

至此,xml的常規操作就介紹完了,希望能對有需要的同學有所幫助.

posted on 2012-07-14 10:10 BoyXiao 閱讀(144) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導航

留言簿(43)

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美精品久久一区| 欧美另类videos死尸| 国产精品美女xx| 午夜精品福利一区二区三区av | 欧美aⅴ一区二区三区视频| 小黄鸭视频精品导航| 国内一区二区三区| 欧美国产激情| 欧美日韩在线视频观看| 亚洲欧美视频| 久久精品中文| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美午夜精彩| 久久福利资源站| 美女国产精品| 午夜精品美女久久久久av福利| 亚洲免费视频观看| 在线看片日韩| 一区二区三区黄色| 黄色成人在线网站| 亚洲美女视频网| 国产日韩综合| 亚洲日本黄色| 国产欧美精品xxxx另类| 欧美激情a∨在线视频播放| 欧美三级中文字幕在线观看| 久久一区二区三区四区| 欧美激情aⅴ一区二区三区| 欧美亚洲在线观看| 免费成人在线视频网站| 午夜免费在线观看精品视频| 噜噜噜在线观看免费视频日韩| 亚洲一区二区精品在线| 久久久久久久欧美精品| 亚洲欧美区自拍先锋| 久久这里只有| 久久精品观看| 国产精品福利片| 亚洲第一页在线| 国产视频一区欧美| 亚洲最新视频在线播放| 亚洲精品国产精品国自产观看| 欧美在线视频日韩| 亚洲永久免费| 欧美日韩国产页| 亚洲福利在线看| 亚洲第一久久影院| 欧美一区免费| 欧美在线欧美在线| 欧美三级日本三级少妇99| 欧美国产日韩二区| 一区二区三区在线看| 午夜亚洲一区| 久久狠狠婷婷| 国产乱肥老妇国产一区二| av成人毛片| 亚洲视屏在线播放| 欧美日韩的一区二区| 91久久国产综合久久蜜月精品 | 国产一区二区三区直播精品电影| 亚洲精品乱码久久久久久久久| 亚洲高清久久| 久久久久久久久综合| 久久久久综合网| 国产一区二区精品在线观看| 亚洲一区在线观看视频 | 亚洲三级国产| 免费在线视频一区| 欧美激情一区二区三区全黄| 亚洲欧洲精品一区二区三区不卡 | 亚洲一区二区三区在线看| 欧美韩日一区| 亚洲巨乳在线| 亚洲一区区二区| 国产精品普通话对白| 亚洲欧美日产图| 久久精品久久综合| 一区二区三区在线观看国产| 久久午夜电影网| 亚洲人成毛片在线播放| 日韩网站免费观看| 国产精品国产三级国产aⅴ入口| 亚洲午夜精品久久久久久浪潮 | 久久久久国产一区二区三区四区| 国产日韩亚洲欧美精品| 久久精品亚洲一区二区| 欧美成人精品| 亚洲天堂av在线免费观看| 国产精品视频福利| 久久精品水蜜桃av综合天堂| 亚洲国产一区二区精品专区| 亚洲天堂男人| 国产自产2019最新不卡| 欧美成年人视频| 亚洲婷婷在线| 欧美激情二区三区| 亚洲欧美福利一区二区| 一色屋精品亚洲香蕉网站| 欧美夫妇交换俱乐部在线观看| 亚洲桃花岛网站| 美女黄色成人网| 亚洲欧美激情精品一区二区| 狠狠色2019综合网| 欧美日韩在线免费观看| 久久精品免费观看| 在线一区二区视频| 欧美成人一区二区| 久久不射2019中文字幕| 亚洲精品乱码久久久久久日本蜜臀 | 一本久久青青| 狠狠色噜噜狠狠狠狠色吗综合| 欧美精品一区二区精品网| 欧美一区日韩一区| 99re成人精品视频| 欧美高潮视频| 久久久精品日韩| 亚洲影院在线| 日韩亚洲视频在线| 伊人春色精品| 国产精品一区在线观看| 欧美另类69精品久久久久9999| 久久精品国产免费观看| 亚洲视频在线免费观看| 91久久久久久久久久久久久| 玖玖精品视频| 久久久九九九九| 午夜精品电影| 亚洲一区二区免费看| 日韩视频一区二区| 亚洲日本成人| 亚洲黄色一区二区三区| 激情久久影院| 黑人巨大精品欧美一区二区| 国产精品午夜春色av| 国产精品免费观看在线| 欧美日韩另类国产亚洲欧美一级| 欧美二区乱c少妇| 免费亚洲网站| 欧美不卡激情三级在线观看| 老牛国产精品一区的观看方式| 久久精品人人爽| 久久国产免费看| 久久久久久久久久码影片| 久久精品一区二区三区四区| 久久精品一区四区| 久久久精品午夜少妇| 久久久久久久综合日本| 久久中文在线| 猛干欧美女孩| 欧美精品激情| 国产精品hd| 国产精品成人av性教育| 国产精品伦一区| 国产日韩精品一区观看| 国产一区二区电影在线观看| 影音先锋中文字幕一区| 亚洲国产精品悠悠久久琪琪| 亚洲欧洲在线看| 一区二区三区蜜桃网| 午夜精品久久久久久久蜜桃app| 欧美综合激情网| 麻豆成人综合网| 亚洲日韩视频| 亚洲砖区区免费| 久久综合久久久久88| 欧美精品在线播放| 国产精品久久久久久五月尺| 国产一区二区三区四区三区四| 在线成人激情黄色| 一区二区欧美国产| 欧美在线免费视屏| 欧美激情中文不卡| 在线亚洲欧美视频| 久久久久久久97| 欧美日韩激情网| 国产综合精品| 一区二区三区高清| 久久久久久久激情视频| 亚洲狠狠丁香婷婷综合久久久| 在线视频你懂得一区| 久久久亚洲精品一区二区三区 | 国产一区二区三区黄| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 欧美黄色精品| 宅男噜噜噜66一区二区| 久久精品成人一区二区三区| 欧美精品日本| 极品av少妇一区二区| 99国产精品久久久久老师| 亚洲免费一区二区| 欧美一区二区| 91久久精品久久国产性色也91| 夜夜夜久久久| 免播放器亚洲| 国产一区二区在线观看免费播放| 亚洲毛片在线观看.| 久久亚洲影音av资源网| 日韩视频第一页| 欧美成人在线影院| 狠狠入ady亚洲精品|