1. using System;
  2. using System.Linq;
  3. using System.Xml.Linq;
  4. using DFS.Kiosk.Provider.Simulator.Common.Utilities;
  5. using DFS.Kiosk.Provider.Simulators.Utilities;
  6.  
  7. namespace DFS.Kiosk.Provider.Simulator.Common.Data
  8. {
  9. public static class DataAccessor
  10. {
  11. private static readonly object ReadWriteLock = new object();
  12.  
  13. private static XDocument _doc;
  14.  
  15. private const string XmlFileName = "Data/ValidTickets.xml";
  16.  
  17. private static XDocument Doc
  18. {
  19. get { return _doc ?? (_doc = XDocument.Load(XmlFileName)); }
  20. }
  21.  
  22. public static string ReadTicket(string ticketNumber, TicketStatus ticketstatus)
  23. {
  24. try
  25. {
  26. lock (ReadWriteLock)
  27. {
  28. XElement element = (from elem in Doc.Elements().Descendants()
  29. where elem.Value == ticketNumber && elem.Attribute("status").Value == ticketstatus.ToString()
  30. select elem).FirstOrDefault();
  31. return element != null ? element.Attribute("amount").Value : "";
  32. }
  33. }
  34. catch (Exception ex)
  35. {
  36. Logger.WriteLogger(ex, ConstValues.MainLogFileName);
  37. }
  38. return "";
  39. }
  40.  
  41. public static string ReadKonamiTicket(string ticketNumber, TicketStatus ticketstatus)
  42. {
  43. try
  44. {
  45. lock (ReadWriteLock)
  46. {
  47. XElement element = (from elem in Doc.Elements().Descendants()
  48. where elem.Value.Substring(,) == ticketNumber && elem.Attribute("status").Value == ticketstatus.ToString()
  49. select elem).FirstOrDefault();
  50. return element != null ? element.Attribute("amount").Value : "";
  51. }
  52. }
  53. catch (Exception ex)
  54. {
  55. Logger.WriteLogger(ex, ConstValues.MainLogFileName);
  56. }
  57. return "";
  58. }
  59.  
  60. public static string ReadTicket(string ticketNumber, string attribute)
  61. {
  62. try
  63. {
  64. lock (ReadWriteLock)
  65. {
  66. XElement element =
  67. (from elem in Doc.Elements().Descendants() where elem.Value == ticketNumber select elem)
  68. .FirstOrDefault();
  69. if (attribute == "status")
  70. {
  71. return element != null ? element.Attribute("status").Value : TicketStatus.NotFound.ToString();
  72. }
  73. if (attribute == "amount")
  74. {
  75. return element != null ? element.Attribute("amount").Value : "";
  76. }
  77. }
  78. }
  79. catch (Exception ex)
  80. {
  81. Logger.WriteLogger(ex, ConstValues.MainLogFileName);
  82. }
  83. return "";
  84. }
  85.  
  86. public static bool WriteTicket(string ticketNumber, TicketStatus oldStatus, TicketStatus newStatus)
  87. {
  88. try
  89. {
  90. lock (ReadWriteLock)
  91. {
  92. XElement element = (from elem in Doc.Elements().Descendants()
  93. where elem.Value == ticketNumber && elem.Attribute("status").Value == oldStatus.ToString()
  94. select elem).FirstOrDefault();
  95. if (element != null)
  96. {
  97. element.Attribute("status").Value = newStatus.ToString();
  98. return true;
  99. }
  100. return false;
  101. }
  102. }
  103. catch (Exception ex)
  104. {
  105. Logger.WriteLogger(ex, ConstValues.MainLogFileName);
  106. return false;
  107. }
  108. }
  109.  
  110. public static bool WriteKonamiTicket(string ticketNumber, TicketStatus oldStatus, TicketStatus newStatus)
  111. {
  112. try
  113. {
  114. lock (ReadWriteLock)
  115. {
  116. XElement element = (from elem in Doc.Elements().Descendants()
  117. where elem.Value.Substring(,) == ticketNumber && elem.Attribute("status").Value == oldStatus.ToString()
  118. select elem).FirstOrDefault();
  119. if (element != null)
  120. {
  121. element.Attribute("status").Value = newStatus.ToString();
  122. return true;
  123. }
  124. return false;
  125. }
  126. }
  127. catch (Exception ex)
  128. {
  129. Logger.WriteLogger(ex, ConstValues.MainLogFileName);
  130. return false;
  131. }
  132. }
  133.  
  134. /// <summary>
  135. /// Creates ticket, add xml node into ValidTickets.xml file
  136. /// </summary>
  137. /// <param name="amount">The amount.</param>
  138. /// <returns></returns>
  139. public static string CreateTicket(string amount)
  140. {
  141. try
  142. {
  143. lock (ReadWriteLock)
  144. {
  145. XElement lastTiket = Doc.Elements().Descendants().Last();
  146. string number = (long.Parse(lastTiket.Value) + ).ToString();
  147.  
  148. //if number.lenght<18 fill with "0" at start
  149. while (number.Length < )
  150. {
  151. number = "" + number;
  152. }
  153. //get 18 character in case number.lengh>18
  154. string ticketNumber = number.Substring(number.Length - , );
  155.  
  156. //add new ticket to xdocoment
  157. var newNode = new XElement("ValidVoucher",
  158. new XAttribute("status", TicketStatus.pending),
  159. new XAttribute("amount", amount));
  160. newNode.SetValue(ticketNumber);
  161. if (Doc.Root != null) Doc.Root.Add(newNode);
  162.  
  163. return ticketNumber;
  164. }
  165. }
  166. catch (Exception ex)
  167. {
  168. Logger.WriteLogger(ex, ConstValues.MainLogFileName);
  169. return "";
  170. }
  171. }
  172.  
  173. public static bool Reset()
  174. {
  175. try
  176. {
  177. lock (ReadWriteLock)
  178. {
  179. _doc = XDocument.Load(XmlFileName);
  180. }
  181. }
  182. catch (Exception ex)
  183. {
  184. Logger.WriteLogger(ex, ConstValues.MainLogFileName);
  185. return false;
  186. }
  187. return true;
  188. }
  189. }
  190. }

XML新增、修改、选择的更多相关文章

  1. salesforce 零基础学习(六十九)当新增/修改一条记录以后发生了什么(适合初学者)

    salesforce开发中,我们会对object进行很多的操作,比如对object设置字段的必填性唯一性等,设置validation rule实现一下相关的字段的逻辑校验,设置workflow实现某个 ...

  2. 如何使用编辑模板在ASPxGridView中进行新增修改(除去常规的gridviw模板编辑外)

    aspgridview模板编辑效果图: //前端代码:(核心: <Templates><EditForm>.....中间可用栅格样式布局等(随意)...</Templat ...

  3. xml动态修改 dom4j修改

    xml的动态修改需要传入的参数 xml的位置(tomcat中的发布位置).修改后的xml需要保存的位置(因为动态修改,所以建议和xml未修改前的位置相同).添加的节点的信息.或者修改的节点的信息 SA ...

  4. Java代码操作properties文件(读取,新增/修改,删除)

    项目中需要用到操作properties文件中的数据,记录一下 package com.bonc.savepic.save; import java.io.FileNotFoundException; ...

  5. Java 操纵XML之修改XML文件

    Java 操纵XML之修改XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...

  6. 修改选择排序 Exercise07_20

    import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年12月 * 题目:修改选择排序 * */ public class Exercise07_2 ...

  7. Element-ui 下拉列表 全选 多选时 select全选 新增一个选择所有的选项

    项目里经常会用到,在一个多选下拉框里新增一个选择所有的选项,例如: <!DOCTYPE html> <html lang="en"> <head> ...

  8. Oracle忘记用户名和密码以及管理员用户新增修改删除用户

    Oracle忘记密码: 1.以管理员身份登录,打开dos窗口,输入 sqlplus / as sysdba 回车 2.查看当前用户和状态 select username, account_status ...

  9. .net操作xml文件(新增.修改,删除,读取) 转

    今天有个需求需要操作xml节点.突然见遗忘了许多.上网看了些资料.才整出来.脑袋真不够用.在这里把我找到的资料共享一下.方便以后使用.本文属于网摘/ 1 一.简单介绍2 using System.Xm ...

随机推荐

  1. 支付宝api教程,支付宝根据交易号自动充值

    最近公司要用php做一个网站支付宝自动充值的功能,具体就是客户把钱直接转到公司的支付宝账号里,然后在我们网站上填写上交易号,我们网站程序自动获取交易信息,自动给网站的账户充值. 我的具体想法就是利用支 ...

  2. 省市选择(基于zepto.js)

    效果如下: <div class="clList overflow-h mt75"> <select class="pull-left cl-35 se ...

  3. LinqToExcel常用对象

    1.ExcelQueryFactory对象(1)获取工作表名集合IEnumerable<string> GetWorksheetNames() //获取工作薄中的工作表名 foreach ...

  4. H5 App如此强悍,要降薪的恐怕已不只是iOS程序员

    2015年的最后几天,移动开发圈里最为火爆的话题之一无疑是“iOS程序员月薪降至12K”这则报道. 有人认为这是O2O创业遇冷所致,也有人认为这是iOS生态过于封闭致使智能硬件等新领域对iOS开发者的 ...

  5. python初准备:安装easy_install和pip

    安装easy_install wget http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py 安装pip wget htt ...

  6. 关于appStore评分的相关说明--转自张诚教授

    在iOS7以前,评分地址如下 itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?typ ...

  7. IIS MIME类型问题(html5 video 本地打开可以,IIS打开不了)

    问题: mediaelement js(html 5 视频插件)网页用ie9本地打开可以,iis,vs2010在ie9上运行不了,chrome可以 (在博客园里有个人跟我遇到相同的问题:http:// ...

  8. Highcharts资料

    对应的API:   http://api.hcharts.cn/#chart.events 对应的中文网实例:http://www.hcharts.cn/demo/highcharts/dynamic ...

  9. matlab高斯模板生成,K是归一化系数,上面是一个半径200的高斯模板用来做MSR

    R3=; F=zeros(*R3+,*R3+); sigma=R3/; r=; :*R3+     :*R3+         r=(x-R3)*(x-R3)+(y-R3)*(y-R3);       ...

  10. CQRS学习——IOC,配置,仓储隔离以及QueryEntry[其三]

    从IoC开始说起 博主最早开始用的IoC容器叫AutoFac,那时候用它主要是为了生命周期管理——将EF上下文的生命周期限定为每请求.当然也总是每每听到IoC的好处,但是仍然不能理解其优势.最近在学习 ...