linq to xml 操作实例
/// <summary> /// 拼接xml结构 /// </summary> /// <returns></returns> public XElement GetListXml(string id) { try { //判断客户端传输过来的是否是int型 int tempInt = 0; int tempIntPs = 0; if (!string.IsNullOrEmpty(tempPageNumber)) { int.TryParse(tempPageNumber, out tempInt); } if (!string.IsNullOrEmpty(tempPageSize)) { int.TryParse(tempPageSize, out tempIntPs); } id = isBBSName(id); //根 XElement xRoot = new XElement("root"); //查询根数据 DataSet ds = null; if (string.IsNullOrEmpty(id)) { XElement xTabs = new XElement("tabs"); xRoot.Add(xTabs); if (ds != null && ds.Tables[0].Rows.Count > 0) { foreach (DataRow dr in ds.Tables[0].Rows) { //选项卡 XElement xTab = new XElement("tab"); xTab.Add(new XAttribute("title", "" + dr["Name"].ToString().Trim() + "")); xTab.Add(new XAttribute("id", "" + dr["HierarchyCode"].ToString().Trim() + "")); xTabs.Add(xTab); } } return xRoot; //直接返回 } else { // 获取接口分类 SourceURL URL = new SourceURL("BBS_Category"); string ret = new GetHtmlByUrl().fncGetHtmlByUrl(URL["address"]); XElement srcXml = XElement.Parse(ret); var boards = from node in srcXml.Elements() where node.Name == "board" select node; XElement imageView = new XElement("imageview"); xRoot.Add(imageView); XElement list = new XElement("list"); foreach (XElement board in boards) { // 判断传输的id是否是大级分类 if (board.Attribute("name").Value == id) { var forums = from node in board.Elements() where node.Name == "forum" select node; forums = forums.Skip(tempInt).Take(tempIntPs); foreach (XElement forum in forums) { XElement item = new XElement("item"); if (!string.IsNullOrEmpty(forum.Attribute("id").Value)) { //判断是否有下级列表 SourceURL BBSList = new SourceURL("BBS_List"); string Para = BBSList["para"]; string address = BBSList["address"]; string paras = string.Empty; string[] arg = new string[] { forum.Attribute("id").Value }; if (!string.IsNullOrEmpty(Para)) paras = string.Format(Para, arg); string tempaddress = new GetHtmlByUrl().fncGetHtmlByUrl(address + "?" + paras); //读取列表地址 XElement NoteXml = XElement.Parse(tempaddress); //var Noteposts = from node in NoteXml.Elements() // where node.Name == "posts" // select node; var tempPost = from node in NoteXml.Elements() where node.Name == "posts" select node; // 判断是否还有下级 if (tempPost != null && tempPost.Count() > 0) item.Add(new XAttribute("level", "true")); else item.Add(new XAttribute("level", "false")); item.Add(new XElement("id", forum.Attribute("id").Value)); } item.Add(new XElement("title", forum.Attribute("name").Value)); item.Add(new XElement("date", string.Empty)); item.Add(new XElement("img", string.Empty)); item.Add(new XElement("summary", string.Empty)); list.Add(item); } xRoot.Add(list); return xRoot; } } // 传输的id为子级分类 SourceURL _BBSList = new SourceURL("BBS_List"); string _Para = _BBSList["para"]; string _address = _BBSList["address"]; string _paras = string.Empty; string[] _arg = new string[] { id }; if (!string.IsNullOrEmpty(_Para)) _paras = string.Format(_Para, _arg); string _tempaddress = new GetHtmlByUrl().fncGetHtmlByUrl(_address + "?" + _paras); //读取列表地址 XElement _NoteXml = XElement.Parse(_tempaddress); //var _Noteposts = from node in _NoteXml.Elements() // where node.Name == "posts" // select node; var _tempPosts = from node in _NoteXml.Elements() where node.Name == "posts" select node; if (_tempPosts != null && _tempPosts.Count() > 0) { var _tempPost = _tempPosts.Elements().Where(p => p.Name == "post").Skip(tempInt).Take(tempIntPs); if (_tempPost != null && _tempPost.Count() > 0) { foreach (var notePost in _tempPost) { XElement _item = new XElement("item"); _item.Add(new XAttribute("level", "false")); _item.Add(new XElement("id", notePost.Attribute("id").Value)); _item.Add(new XElement("title", notePost.Element("posttitle").Value.Replace(" ", "").Replace("\n", "").Replace("\r", "").Replace("<br />", ""))); _item.Add(new XElement("date", string.Empty)); _item.Add(new XElement("img", string.Empty)); _item.Add(new XElement("summary", notePost.Element("poststatic").Value)); list.Add(_item); } } } xRoot.Add(list); return xRoot; } } catch (Exception ex) { LogCommon.ilogDebug.Debug("BBS 拼接列表xml报错:" + ex.ToString()); return null; } }