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的主要作用是进行流式的实时计算,对于一直产生的数据流处理是非常迅速的,然而大部分数据并不是均匀的数据流 ...
随机推荐
- 基于Svelte3.x桌面端UI组件库Svelte UI
Svelte-UI,一套基于svelte.js开发的桌面pc端ui组件库 最近一直忙于写svelte-ui,一套svelte3开发的桌面端ui组件库.在设计及功能上借鉴了element-ui组件库.所 ...
- NC16561 [NOIP2012]国王的游戏
NC16561 [NOIP2012]国王的游戏 题目 题目描述 恰逢 H 国国庆,国王邀请 \(n\) 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上 ...
- HiEngine:可媲美本地的云原生内存数据库引擎
摘要:HiEngine与华为GaussDB (for MySQL)集成,将内存数据库引擎的优势带到云端,并与基于磁盘的引擎共存.HiEngine的性能比传统的以存储为中心的解决方案高出7.5倍. 本文 ...
- 《Ranked List Loss for Deep Metric Learning》CVPR 2019
Motivation: 深度度量学习的目标是学习一个嵌入空间来从数据点中捕捉语义信息.现有的成对或者三元组方法随着模型迭代过程会出现大量的平凡组导致收敛缓慢.针对这个问题,一些基于排序结构的损失取得了 ...
- 今天介绍一下自己的开源项目,一款以spring cloud alibaba为核心的微服务架构项目,为给企业与个人提供一个零开发基础的微服务架构。
LaoCat-Spring-Cloud-Scaffold 一款以spring cloud alibab 为核心的微服务框架,主要目标为了提升自己的相关技术,也为了给企业与个人提供一个零开发基础的微服务 ...
- 索尼笔记本Linux系统唤醒后,键盘无法使用
1.编辑grub文件 sudo gedit /etc/default/grub 2.修改成以下参数 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i804 ...
- Josephus问题(Ⅰ)
题目描述 n个人排成一圈,按顺时针方向依次编号1,2,3-n.从编号为1的人开始顺时针"一二"报数,报到2的人退出圈子.这样不断循环下去,圈子里的人将不断减少.最终一定会剩下一个人 ...
- 5-12 RabbitMQ 消息队列
RabbitMQ 什么是RabbitMQ RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现. AMQP :Advanced Message Queue,高级消息队列协议.它是 ...
- SpringBoot数据库管理 - 用flyway对数据库管理和迁移
上文介绍了Liquibase,以及和SpringBoot的集成.除了Liquibase之外,还有一个组件Flyway也是经常被使用到的类似的数据库版本管理中间件.本文主要介绍Flyway, 以及Spr ...
- 项目配置yaml
springboot的一些配置 #当循环调用时,就会报错 spring.main.allow-circular-references=true #配置mvc是需要使用一个@EnableWebMvc,不 ...