几行代码搞定树形文本转XML和JSON
发布时间:2020-12-16 08:03:04 所属栏目:百科 来源:网络整理
导读:由于需要将百度脑图的内容导出为xml或者json格式,发现百度脑图只能导出为树形文本,所以就写了个小应用给编辑用。 /// summary /// 树形文本转xml /// /summary /// param name="txt"/param /// returns/returns public static string Txt2Xml(string txt)
由于需要将百度脑图的内容导出为xml或者json格式,发现百度脑图只能导出为树形文本,所以就写了个小应用给编辑用。
/// <summary> /// 树形文本转xml /// </summary> /// <param name="txt"></param> /// <returns></returns> public static string Txt2Xml(string txt) { //创建XDocument对象 var xmlDoc = new XDocument(); //逐行提取文本 var txts = txt.Split(new[] { 'r','n' },StringSplitOptions.RemoveEmptyEntries); foreach (var tt in txts) { var title = tt.TrimStart('t').Trim(); if (title == "") continue; var level = tt.Length - title.Length; //父节点 var parentEle = xmlDoc.Descendants("level").LastOrDefault(p => p.Value == (level - 1).ToString())?.Parent; //新节点 XElement newChildEle; if (parentEle == null) xmlDoc.Add(newChildEle = new XElement("data")); else parentEle.Add(newChildEle = new XElement("children")); newChildEle.Add(new XElement("topic",title)); newChildEle.Add(new XElement("level",level)); /**可以添加其它需要的内容**/ //newChildEle.Add(new XElement("direction","right")); //newChildEle.Add(new XElement("expanded",true)); } xmlDoc.Declaration = new XDeclaration("1.0","UTF-8",null); return xmlDoc.Declaration + "rn" + xmlDoc; } /// <summary> /// xml转json /// </summary> /// <param name="xmlTxt"></param> /// <returns></returns> public static string Xml2Json(string xmlTxt) { return JsonConvert.SerializeXNode(XElement.Parse(xmlTxt),Newtonsoft.Json.Formatting.Indented); } public void SaveToFile(string txt,string type) { if (type == "xml") { var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(txt); _txtTitle = xmlDoc.DocumentElement?.SelectSingleNode("topic")?.InnerText; } else { var jo = JObject.Parse(txt); _txtTitle = jo["data"]?["topic"]?.ToString(); } var sfd = new SaveFileDialog { Filter = @"" + type + @" file|*." + type + "",FilterIndex = 2,RestoreDirectory = true,FileName = _txtTitle ?? "untitled" }; var dr = sfd.ShowDialog(); if (dr == DialogResult.OK && sfd.FileName.Length > 0) { using (var fsw = new StreamWriter(sfd.FileName,false)) { fsw.Write(txt); fsw.Close(); fsw.Dispose(); } new MessageBoxTimeOut().Show(1000,@"保存成功。",@"提示",MessageBoxButtons.OK,MessageBoxIcon.Information); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- postgresql – 生成从每个节点到树的根的路径,表示为表中的
- flex4 RIA 获取本地图片文件并加载给img控件
- oracle 分割,号
- c# – Log4Net如何同时使用ErrorFormat和Error
- ruby-on-rails – form_for with datetime_select
- 【第17篇】通过fastjson去操作对象数据并处理json数据
- ruby – 是否可以在命名空间中获取所有可用的耙子任务的列表
- 探索Vue高阶组件的使用
- net.sf.json.JSONException: Unquotted string "E44C2B
- Vue.js——60分钟webpack项目模板快速入门
推荐文章
站长推荐
- A3D8的水–WaterMaterial for Alternativa3D 8
- 在IAR下通过Jlink将程序直接下载到Flash指定地址
- IT宅男们,有没有什么技术让你觉得相见恨晚?
- ruby-on-rails – Rails:使用资产管道的liverel
- JSONCpp在windows下的VC6编译和调用
- ruby-on-rails – after_validation和before_sav
- c# – 检测打开文件上的文件删除
- ruby-on-rails – 在emacs:utf-8问题中使用url
- 笔记3:FileWebRequest 与 FileWebResponse
- postgreSQL查询 – 计算两列匹配的列值
热点阅读