winform,xml读取与写入
创建两个xml文件,一个 xml做为模板配置项,另一个做为临时接收数据。
private static string localPath = System.Environment.CurrentDirectory + @"\test\";
private static string localPathOld = System.Environment.CurrentDirectory + @"\test\YUYUE_PRINTOld.xml";
private static string localPathAdd = System.Environment.CurrentDirectory + @"\test\YUYUE_PRINT.xml";
写入方法:
string path = localPath + "/YUYUE_PRINTOld.xml";
string stu_At= "{'name': '0000899112','BarcodeRecognition': 'UPC-E','Sex': '男','Age': '27','Blood': '全血','BarCode': '210720002147','Content': '网织红细胞计数','iMode': 0}";
var docment = CustomerFormBase.Json2Xml(stu_At);
docment.Save(path);
xml读取方法:
/// <summary>
/// xml读取
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
string path = localPath + "/YUYUE_PRINTOld.xml"; string stu_At = "{\"name\":\"0000899112 宁强\",\"BarcodeRecognition\": \"UPC-E\",\"Sex\":\"男\",\"Age\": \"27\",\"Blood\": \"全血\",\"BarCode\": \"210720002147\",\"Content\": \"网织红细胞计数\",\"iMode\": 0}";
var docment = CustomerFormBase.Json2Xml(stu_At);
docment.Save(path); StringBuilder m_sbData = new StringBuilder("");
var xmlTemporary = CustomerFormBase.XmlTemporaryFiles(localPathOld);
var xmlConfigurationF = CustomerFormBase.XmlConfigurationFile(localPathAdd);
bool isXml = true;
if (xmlTemporary==null)
{
isXml = false;
MessageBox.Show("xml临时文件读取失败,请查看文件是text文件夹,以及对应文件是否存在!");
}
if (xmlConfigurationF==null)
{
isXml = false;
MessageBox.Show("xml配置文件读取失败,请查看文件是text文件夹,以及对应文件是否存在!");
}
List<XmlOld> xmlData = new List<XmlOld>();
if (isXml)
{
bool isXmlModel = true;
foreach (DataRow drXML in xmlConfigurationF.Rows)
{
var xmlModel = new XmlOld();
if (decimal.TryParse(drXML["X"].ToString(), out decimal xAt))
{
xmlModel.X = xAt;
}
else
{
isXmlModel = false;
}
if (decimal.TryParse(drXML["Y"].ToString(), out decimal yAt))
{
xmlModel.Y = yAt;
}
else
{
isXmlModel = false;
}
if (!string.IsNullOrWhiteSpace(drXML["Names"].ToString()))
{
xmlModel.Names = drXML["Names"].ToString();
xmlModel.NameInfo = xmlTemporary.GetValueByXmlNodeName(xmlModel.Names.Trim());
}
else
{
isXmlModel = false;
}
if (isXmlModel)
{
xmlData.Add(xmlModel);
}
else
{
MessageBox.Show("X/Y/Names都为必填项不可为空,并且X/Y只能位数字");
break;
}
SetPagedirection(0);//设置页模式打印方向
SetPagestartposition(Convert.ToInt32(xmlModel.X), Convert.ToInt32(xmlModel.Y));//设置页模式数据打印起始位置
m_sbData = new StringBuilder(xmlModel.NameInfo);//性别
PrintString(m_sbData, 0);//打印字符串
}
if (isXmlModel)
{
this.txt_Xml.Text = "读取成功";
}
else
{
this.txt_Xml.Text = "读取失败";
}
}
}
创建一个CustomerFormBase类
public abstract class CustomerFormBase
{
[JsonIgnore]
public string ExtendData { get; set; }
public static T Parse<T>(string v) where T : CustomerFormBase
{
var value = JsonConvert.DeserializeObject<T>(v); var xml = JsonConvert.DeserializeXmlNode(v, "root");
value.ExtendData = xml.OuterXml; return value;
} public static List<T> ParseToList<T>(string vs) where T : CustomerFormBase
{
var values = new List<T>();
var valueStrs = JsonConvert.DeserializeObject<List<string>>(vs);
foreach (var valueStr in valueStrs)
{
values.Add(Parse<T>(valueStr));
} return values; } public virtual JObject ToMergedObject()
{
var json = "{}"; if (!string.IsNullOrWhiteSpace(ExtendData))
{
var doc = new XmlDocument();
doc.LoadXml(ExtendData); json = JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None, true);
} var obj = JObject.Parse(json);
var norObj = JObject.FromObject(this); obj.Merge(norObj);
obj.Remove(nameof(ExtendData)); return obj;
} public override string ToString()
{
return ToMergedObject().ToString();
} /// <summary>
/// 根据xml节点获取对应的数据
/// </summary>
/// <param name="xmlNodeName">xml节点名称</param>
/// <returns></returns>
public string GetValueByXmlNodeName(string xmlNodeName)
{
var jObject = ToMergedObject();
var tokenValue = jObject.SelectToken(xmlNodeName);
if (tokenValue != null)
{
if (tokenValue.Type == JTokenType.Array)
{
var arrayValue = tokenValue.Value<JArray>().Children();
return string.Join("|", arrayValue);
}
else
{
return tokenValue.Value<string>();
}
}
else
{
return string.Empty;
}
} /// <summary>
/// 更新extendData的值
/// </summary>
/// <param name="keyValues"></param>
/// <returns></returns>
public bool addOrUpdateNodeValue<T>(Dictionary<string, string> keyValues) where T : CustomerFormBase
{
var jObject = ToMergedObject(); foreach (var key in keyValues.Keys)
{
var jToken = jObject.SelectToken(key);
if (jToken == null)
{
jObject.Add(key, keyValues[key]);
}
else
{
jObject[key] = keyValues[key];
}
} this.ExtendData = Parse<T>(jObject.ToString()).ExtendData; return true;
} /// <summary>
/// json字符串转换为Xml对象
/// </summary>
/// <param name="sJson"></param>
/// <returns></returns>
public static XmlDocument Json2Xml(string sJson)
{
JavaScriptSerializer oSerializer = new JavaScriptSerializer();
Dictionary<string, object> Dic = (Dictionary<string, object>)oSerializer.DeserializeObject(sJson);
XmlDocument doc = new XmlDocument();
XmlDeclaration xmlDec;
xmlDec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.InsertBefore(xmlDec, doc.DocumentElement);
XmlElement nRoot = doc.CreateElement("root");
doc.AppendChild(nRoot);
foreach (KeyValuePair<string, object> item in Dic)
{
XmlElement element = doc.CreateElement(item.Key);
KeyValue2Xml(element, item);
nRoot.AppendChild(element);
}
return doc;
} public static void KeyValue2Xml(XmlElement node, KeyValuePair<string, object> Source)
{
object kValue = Source.Value;
if (kValue.GetType() == typeof(Dictionary<string, object>))
{
foreach (KeyValuePair<string, object> item in kValue as Dictionary<string, object>)
{
XmlElement element = node.OwnerDocument.CreateElement(item.Key);
KeyValue2Xml(element, item);
node.AppendChild(element);
}
}
else if (kValue.GetType() == typeof(object[]))
{
object[] o = kValue as object[];
for (int i = 0; i < o.Length; i++)
{
XmlElement xitem = node.OwnerDocument.CreateElement("Item");
KeyValuePair<string, object> item = new KeyValuePair<string, object>("Item", o);
KeyValue2Xml(xitem, item);
node.AppendChild(xitem);
} }
else
{
XmlText text = node.OwnerDocument.CreateTextNode(kValue.ToString());
node.AppendChild(text);
}
} /// <summary>
/// xml临时文件读取
/// </summary>
public static XmlOld XmlTemporaryFiles(string localPathOld)
{
if (!File.Exists(localPathOld))
{
return null;
}
else
{
var xmlModel = new XmlOld();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(localPathOld);//读取xml文件
XmlNode xn = xmlDoc.SelectSingleNode("root");
var xmlText = xn.InnerXml.ToString();
if (xmlText.Length > 0)
{
xmlText = "<root>" + xmlText + "</root>";
xmlModel.ExtendData = xmlText;
return xmlModel;
}
else
{
return null;
}
}
} /// <summary>
/// xml配置文件读取
/// </summary>
public static DataTable XmlConfigurationFile(string localPathAdd)
{
if (!File.Exists(localPathAdd))//若文件夹不存在则新建文件夹
{
return null;
}
else
{
DataSet ds = new DataSet();
ds.ReadXml(localPathAdd);
var xmlSet = ds.Tables["Line"];
if (xmlSet != null)
{
return xmlSet;
}
else
{
return null;
}
}
}
}
创建XmlOld类:
/// <summary>
/// xml信息字段接收
/// </summary>
public partial class XmlOld: CustomerFormBase
{
/// <summary>
/// X抽
/// </summary>
public decimal X { get; set; }
/// <summary>
/// Y抽
/// </summary>
public decimal Y { get; set; }
/// <summary>
/// 字段名称
/// </summary>
public string Names { get; set; }
}
winform,xml读取与写入的更多相关文章
- Winform中自定义xml配置文件后对节点进行读取与写入
场景 Winform中自定义xml配置文件,并配置获取文件路径: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100522648 ...
- vs.net 2005 C# WinForm GroupBOX 的BUG?尝试读取或写入受保护的内存。这通常指示其他内存已损坏
其实很久没有写程序了,国庆难得有空闲,写了个游戏辅助机器人,程序写好能用后本想把UI控件放到GroupBox里归下分类,美化下界面,结果一运行报“尝试读取或写入受保护的内存.这通常指示其他内存已损坏” ...
- C#读取和写入XML文件
关于xml是属于一个比较重要的东西,在平时开发的过程中,这块内容最主要的是要掌握XML内容的读取和写入操作. 一.什么是XML? XML 指可扩展标记语言(EXtensible Markup Lang ...
- C#的XML文件的读取与写入
在设计程序的时候,对于一些变化性较强的数据,可以保存在XML文件中,以方便用户修改.尤其是对于一些软硬件的配置文件,很多都选择了用XML文件来存取.XML文件简单易用,而且可以在任何应用程序中读写数据 ...
- 读取xml文件,写入excel
在上一篇 Python写xml文件已经将所有订单写入xml文件,这一篇我们把xml文件中的内容读出来,写入excel文件. 输入xml格式: <?xml version="1.0&qu ...
- 如何通过SerialPort读取和写入设备COM端口数据
SerialPort类用于控制串行端口文件资源.提供同步 I/O 和事件驱动的 I/O.对管脚和中断状态的访问以及对串行驱动程序属性的访问.另外,SerialPort的功能可以包装在内部 Stream ...
- Xml读取异常--Invalid byte 1 of 1-byte UTF-8 sequence
xml读取异常Invalid byte 1 of 1-byte UTF-8 sequence org.dom4j.DocumentException: Invalid byte 1 of 1-byte ...
- winform程序读取和改写配置文件App.config元素的值
winform程序读取和改写配置文件App.config元素的值 2016-05-16 17:49 by newbirth, 2412 阅读, 0 评论, 收藏, 编辑 1 2 3 4 5 6 7 & ...
- storm集成kafka的应用,从kafka读取,写入kafka
storm集成kafka的应用,从kafka读取,写入kafka by 小闪电 0前言 storm的主要作用是进行流式的实时计算,对于一直产生的数据流处理是非常迅速的,然而大部分数据并不是均匀的数据流 ...
随机推荐
- BetterScroll源码阅读顺便学习TypeScript
开头 TypeScript已经出来很多年了,现在用的人也越来越多,毋庸置疑,它会越来越流行,但是我还没有用过,因为首先是项目上不用,其次是我对强类型并不敏感,所以纯粹的光看文档看不了几分钟就心不在焉, ...
- 021(Keywords Search)(AC自动机)
题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1479 题目思路:一道AC自动机的模板题 备注:还不会字典树和KMP的尽早回去重修 如果让你在一篇 ...
- MySQL-过滤数据(WHERE语句)
1.使用WHERE子句 在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤.WHERE子句在表名( FROM子句)之后给出,如下所示: SELECT prod_name,prod_p ...
- 01. MySQL__数据库分类和介绍
数据库的分类 1. 关系型数据库 以表为数据库存储数据的单位,关系型数据库是经过数学理论验证可以保存现实生活中任何关系型的数据 2. 非关系型数据库 主要应用在一些特定场景,解决某些具体问题比如解决高 ...
- ooday08 Java_多态_向下强制转型
笔记: 多态: 表现: 同一个对象被造型为不同的类型时,有不同的功能 --对象的多态:我.你.水......------所有对象都是多态的(明天体会) 同一类型的引用指向不同的对象时,有不同的实现 - ...
- 手把手教你在netty中使用TCP协议请求DNS服务器
目录 简介 DNS传输协议简介 DNS的IP地址 Do53/TCP在netty中的使用 搭建DNS netty client 发送DNS查询消息 DNS查询的消息处理 总结 简介 DNS的全称doma ...
- 第2章 开始学习C++
说明 看<C++ Primer Plus>时整理的学习笔记,部分内容完全摘抄自<C++ Primer Plus>(第6版)中文版,Stephen Prata 著,张海龙 袁国忠 ...
- CF576A Vasya and Petya's Game
题目大意: 给定一个数字 n,现在 Vasya 要从 1∼n 中想一个数字 x. Petya 向 Vasya 询问 "x 是否能整除 y?" ,通过 Vasya 的回答来判断 x ...
- 造!又有新的生产力语言了「GitHub 热点速览 v.22.30」
作者:HelloGitHub-小鱼干 你还记得那些 PHP 开发都去哪了吗?转 Golang 了!移动端现在流行什么?Flutter 编程.现在谷歌带着新的生产力语言来了,Carbon,代号:C++ ...
- 基于cornerstone.js的dicom医学影像查看浏览功能
最近由于项目需求,需要医学影像.dcm文件的预览功能,功能完成后,基于原生Demo做一个开源分享. 心急的小伙伴可以先看如下基于原生js的全部代码: 一.全部代码 <!DOCTYPE html& ...