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的主要作用是进行流式的实时计算,对于一直产生的数据流处理是非常迅速的,然而大部分数据并不是均匀的数据流 ...
随机推荐
- svn提交报错Unexpected HTTP status 413 'Request Entity Too Large' on
问题原因:nginx的client_max_body_size设置过小,默认 1M,如果请求的正文数据大于client_max_body_size,HTTP协议会报错 413 Request Enti ...
- kubernetes之ingress探索实践
3.Ingress实践 3.1.什么是Ingress? 在ingress之前,我们想要访问k8s集群中的pod服务时,是通过部署一个service,将service的type设置为NodePort或者 ...
- C#(.net) 面试题
1.ASP.NET的页面生存周期 .aspx/.ashx->IIS->Asp.net_isapi.dll->HttpRuntime.ProcessRequest() ->Htt ...
- Note -「模拟退火」
随机化算法属于省选芝士体系 0x01 前置芝士 你只需要会 rand 就可以啦! 当然如果你想理解的更透彻也可以先看看 爬山算法 0x02 关于退火 退火是一种金属热处理工艺,指的是将金属缓慢加热到一 ...
- 零基础学Java(9)在mac上运行命令行提示"找不到或无法加载主类"
天坑 遇到的问题:使用命令行执行命令:java EightSample,会报以下错误 错误: 找不到或无法加载主类 EightSample 运行环境 mac系统 IntelliJ IDEA编译器 Ja ...
- typescript关于postgres数据库的API封装
文章结构 1 新建 postgres.ts 文件 2 配置文件说明 3 依赖引用说明 4 API使用示例 1 新建 postgres.ts 文件,代码如下: imp ...
- websocket、socket、http对比
简介 在之前的理解中,讲述了socket.websocket等相关的理解,本文就socket.websocket.http理解一下其对应的联系和区别. HTTP 协议 http 为短连接:客户端发送请 ...
- ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API
借助路由系统提供的请求URL模式与对应终结点之间的映射关系,我们可以将具有相同URL模式的请求分发给与之匹配的终结点进行处理.ASP.NET的路由是通过EndpointRoutingMiddlewar ...
- HDFS核心原理
HDFS 读写解析 HDFS 读数据流程 客户端通过 FileSystem 向 NameNode 发起请求下载文件,NameNode 通过查询元数据找到文件所在的 DataNode 地址 挑选一台 D ...
- Mybatis完整版详解
一.简介 1.什么是MyBatis MyBatis 是一款优秀的持久层框架 它支持自定义 SQL.存储过程以及高级映射. MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作 ...