xml文件格式(示例):

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <root>
  4. <FunctionKeySettings enabled="true">
  5. <FuncAssign id="0" selected="true">
  6. <Display>System Home</Display>
  7. <FuncKeys>
  8. <Func selected="true">System Home</Func>
  9. <Func>EZ Charger Suite</Func>
  10. <Func>RSI Home</Func>
  11. <Func>Web Browser NX</Func>
  12. <Func>ESA Transformer</Func>
  13. <Func>Print/Scan (Memory Storage Device)</Func>
  14. <Func>Printer (Smart)</Func>
  15. <Func>Printer (Classic)</Func>
  16. <Func>Copy (Smart)</Func>
  17. <Func>Copier (Classic)</Func>
  18. <Func>Scanner (Smart)</Func>
  19. <Func>Scanner (Classic)</Func>
  20. </FuncKeys>
  21. </FuncAssign>
  22. <FuncAssign id="1" selected="true">
  23. <Display>RSI Homerrrrr</Display>
  24. <FuncKeys>
  25. <Func>System Home</Func>
  26. <Func>EZ Charger Suite</Func>
  27. <Func selected="true">RSI Home</Func>
  28. <Func>Web Browser NX</Func>
  29. <Func>ESA Transformer</Func>
  30. <Func>Print/Scan (Memory Storage Device)</Func>
  31. <Func>Printer (Smart)</Func>
  32. <Func>Printer (Classic)</Func>
  33. <Func>Copy (Smart)</Func>
  34. <Func>Copier (Classic)</Func>
  35. <Func>Scanner (Smart)</Func>
  36. <Func>Scanner (Classic)</Func>
  37. </FuncKeys>
  38. </FuncAssign>
  39. <FuncAssign id="2" selected="true">
  40. <Display>EZ Charger Suite</Display>
  41. <FuncKeys>
  42. <Func>System Home</Func>
  43. <Func selected="true">EZ Charger Suite</Func>
  44. <Func>RSI Home</Func>
  45. <Func>Web Browser NX</Func>
  46. <Func>ESA Transformer</Func>
  47. <Func>Print/Scan (Memory Storage Device)</Func>
  48. <Func>Printer (Smart)</Func>
  49. <Func>Printer (Classic)</Func>
  50. <Func>Copy (Smart)</Func>
  51. <Func>Copier (Classic)</Func>
  52. <Func>Scanner (Smart)</Func>
  53. <Func>Scanner (Classic)</Func>
  54. </FuncKeys>
  55. </FuncAssign>
  56. </FunctionKeySettings>
  57. <WebBrowserNXSettings enabled="true">
  58. <HomePage>https://www.na.smart-integration.ricoh.com/si-apps/pub/index.html</HomePage>
  59. </WebBrowserNXSettings>
  60. </root>

对文件的操作:更新、新建、实例化

  1. package com.ricoh.rapp.deploymenttool.device;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.Iterator;
  7. import java.util.LinkedList;
  8. import java.util.List;
  9.  
  10. import org.apache.commons.logging.Log;
  11. import org.apache.commons.logging.LogFactory;
  12. import org.dom4j.Document;
  13. import org.dom4j.DocumentHelper;
  14. import org.dom4j.Element;
  15.  
  16. import com.ricoh.rapp.deploymenttool.ui.RSICloudModel;
  17. import com.ricoh.rapp.deploymenttool.ui.RSICloudModel.FunctionKey;
  18. import com.ricoh.rapp.deploymenttool.ui.RSICloudModel.FunctionKeyOptions;
  19. import com.ricoh.rapp.deploymenttool.util.Consts;
  20. import com.ricoh.rapp.deploymenttool.util.XmlParser;
  21.  
  22. public class RSICloudXmlParser extends XmlParser{
  23.  
  24. private static final Log logger = LogFactory.getLog(RSICloudXmlParser.class);
  25.  
  26. private static final File file = new File(Consts.RSICLOUD_FILE_PATH);
  27. private static final File initialFile = new File(Consts.RSICLOUD_INITIAL_FILE_PATH);
  28.  
  29. public static final String initialUrl = "https://www.na.smart-integration.ricoh.com/si-apps/pub/index.html";
  30.  
  31. private static final String ELEMENT_ROOT = "root";
  32. private static final String ELEMENT_FUNCTIONKEY_SETTINGS = "FunctionKeySettings";
  33. private static final String ELEMENT_FUNCASSIGN = "FuncAssign";
  34. private static final String ELEMENT_DISPLAY = "Display";
  35. private static final String ELEMENT_FUNCKEYS = "FuncKeys";
  36. private static final String ELEMENT_FUNC = "Func";
  37. private static final String ELEMENT_WEBBROWSER_NXSETTINGS = "WebBrowserNXSettings";
  38. private static final String ELEMENT_HOMEPAGE = "HomePage";
  39. private static final String ATTR_ENABLED = "enabled";
  40. private static final String ATTR_ID = "id";
  41. private static final String ATTR_SELECTED = "selected";
  42. private static final String ATTR_VALUE_TRUE = "true";
  43. private static final String ATTR_VALUE_FALSE = "false";
  44.  
  45. public static RSICloudModel parseRSICloudXML(){
  46. logger.info("parseRSICloudXML file: " + initialFile.getName());
  47. logger.info("parseRSICloudXML file: " + file.getName());
  48. Document document = null;
  49. if(file.exists()) {
  50. document = readXML(file);
  51. }else {
  52. document = readXML(initialFile);
  53. }
  54.  
  55. return xmlFileToBean(document);
  56. }
  57.  
  58. public static RSICloudModel resetParseRSICloudXML(){
  59. logger.info("parseRSICloudXML file: " + initialFile.getName());
  60. Document document = readXML(initialFile);
  61. return xmlFileToBean(document);
  62. }
  63.  
  64. private static RSICloudModel xmlFileToBean(Document document) {
  65. RSICloudModel rsiCloud = new RSICloudModel();
  66. if(document == null) {
  67. return rsiCloud;
  68. }
  69. Element root = document.getRootElement();
  70. if(root == null) {
  71. return rsiCloud;
  72. }
  73. Element fkSettingsEle = root.element(ELEMENT_FUNCTIONKEY_SETTINGS);
  74. Element wbSettingsEle = root.element(ELEMENT_WEBBROWSER_NXSETTINGS);
  75. if (fkSettingsEle == null && wbSettingsEle == null) {
  76. return rsiCloud;
  77. }
  78.  
  79. String fkEnabled = fkSettingsEle.attributeValue(ATTR_ENABLED);
  80. rsiCloud.setFunctionKeySettings(stringToBln(fkEnabled));
  81. List<FunctionKey> functionKeys = new ArrayList<>();
  82. for(Iterator rsiCloudsIterator = fkSettingsEle.elementIterator(ELEMENT_FUNCASSIGN); rsiCloudsIterator.hasNext();) {
  83. Element funcAssignEle = (Element) rsiCloudsIterator.next();
  84. FunctionKey FunctionKey = rsiCloud.new FunctionKey();
  85. String id = funcAssignEle.attributeValue(ATTR_ID);
  86. String isSelected = funcAssignEle.attributeValue(ATTR_SELECTED);
  87. String dispalyName = funcAssignEle.element(ELEMENT_DISPLAY).getText();
  88.  
  89. FunctionKey.setId(Integer.parseInt(id));
  90. FunctionKey.setFuncAssign(stringToBln(isSelected));
  91. FunctionKey.setDispalyName(dispalyName);
  92. List<FunctionKeyOptions> functionKeyOptions = new LinkedList<>();
  93. for(Iterator funcIterator = funcAssignEle.element(ELEMENT_FUNCKEYS).elementIterator(ELEMENT_FUNC); funcIterator.hasNext();) {
  94. Element funcEle = (Element) funcIterator.next();
  95. FunctionKeyOptions functionKeyOption = rsiCloud.new FunctionKeyOptions();
  96. String selectedOpt = funcEle.attributeValue(ATTR_SELECTED);
  97. String optValue = funcEle.getText();
  98. functionKeyOption.setSelected(stringToBln(selectedOpt));
  99. functionKeyOption.setChoiceValues(optValue);
  100. functionKeyOptions.add(functionKeyOption);
  101. }
  102. FunctionKey.setFunctionKeyOptions(functionKeyOptions);
  103.  
  104. functionKeys.add(FunctionKey);
  105. }
  106.  
  107. rsiCloud.setFunctionKeys(functionKeys);
  108. String wbEnabled = wbSettingsEle.attributeValue(ATTR_ENABLED);
  109. rsiCloud.setWebBrowserNXSettings(stringToBln(wbEnabled));
  110. String homePageUrl = wbSettingsEle.element(ELEMENT_HOMEPAGE).getText();
  111. rsiCloud.setHomePageUrl(homePageUrl);
  112. return rsiCloud;
  113. }
  114.  
  115. public static boolean saveCustomSettings(RSICloudModel rsiCloud) {
  116. if(file.exists()) {
  117. return updateRSICloudXML(rsiCloud);
  118. }else {
  119. return createRSICloudXml(rsiCloud);
  120. }
  121. }
  122.  
  123. public static boolean updateRSICloudXML(RSICloudModel rsiCloud) {
  124. Document document = readXML(file);
  125. if(document == null || rsiCloud == null) {
  126. return false;
  127. }
  128. Element root = document.getRootElement();
  129.  
  130. Element fkSettingsEle = root.element(ELEMENT_FUNCTIONKEY_SETTINGS);
  131.  
  132. boolean functionKeySettings = rsiCloud.isFunctionKeySettings();
  133. fkSettingsEle.addAttribute(ATTR_ENABLED, booleanToStr(functionKeySettings));
  134.  
  135. List<FunctionKey> functionKeys = rsiCloud.getFunctionKeys();
  136.  
  137. for(Iterator rsiCloudsIterator = fkSettingsEle.elementIterator(ELEMENT_FUNCASSIGN); rsiCloudsIterator.hasNext();) {
  138. Element funcAssignEle = (Element) rsiCloudsIterator.next();
  139.  
  140. int id = Integer.parseInt(funcAssignEle.attributeValue(ATTR_ID));
  141.  
  142. for(FunctionKey functionKey : functionKeys) {
  143. if(functionKey.getId() == id) {
  144. boolean isSelected = functionKey.isFuncAssign();
  145. funcAssignEle.addAttribute(ATTR_SELECTED, booleanToStr(isSelected));
  146. String displayName = functionKey.getDispalyName().trim();
  147. funcAssignEle.element(ELEMENT_DISPLAY).setText(displayName);
  148.  
  149. for(Iterator funcIterator = funcAssignEle.element(ELEMENT_FUNCKEYS).elementIterator(ELEMENT_FUNC); funcIterator.hasNext();) {
  150. Element funcEle = (Element) funcIterator.next();
  151. String funcValue = funcEle.getText();
  152. List<FunctionKeyOptions> functionKeyOptions = functionKey.getFunctionKeyOptions();
  153. for(FunctionKeyOptions functionKeyOption : functionKeyOptions) {
  154. if(functionKeyOption.isSelected() && funcValue.trim().equals(functionKeyOption.getChoiceValues().trim())) {
  155. funcEle.addAttribute(ATTR_SELECTED, booleanToStr(true));
  156. }
  157.  
  158. if(!functionKeyOption.isSelected() && funcValue.trim().equals(functionKeyOption.getChoiceValues().trim())) {
  159. funcEle.remove(funcEle.attribute(ATTR_SELECTED));
  160. }
  161. }
  162. }
  163. }
  164. }
  165. }
  166.  
  167. Element wbSettingsEle = root.element(ELEMENT_WEBBROWSER_NXSETTINGS);
  168. boolean webBrowserSetting = rsiCloud.isWebBrowserNXSettings();
  169. wbSettingsEle.addAttribute(ATTR_ENABLED, booleanToStr(webBrowserSetting));
  170. String homePageUrl = rsiCloud.getHomePageUrl();
  171. wbSettingsEle.element(ELEMENT_HOMEPAGE).setText(homePageUrl);
  172.  
  173. writeXML(document, file);
  174.  
  175. return true;
  176. }
  177.  
  178. private static boolean createRSICloudXml(RSICloudModel rsiCloud) {
  179. if(file.isFile() && file.exists()) {
  180. return true;
  181. }else {
  182. try {
  183. file.createNewFile();
  184. } catch (IOException e) {
  185. logger.error("createRSICloudXml failed:File name: " + file.getName() + ", File path:" + file.getAbsolutePath()
  186. + ", IOException:" + e.getMessage());
  187. }
  188. }
  189. if(rsiCloud == null) return false;
  190.  
  191. Document document = DocumentHelper.createDocument();
  192.  
  193. Element root = document.addElement(ELEMENT_ROOT);
  194. Element fkSettingsEle = root.addElement(ELEMENT_FUNCTIONKEY_SETTINGS);
  195. if(rsiCloud.isFunctionKeySettings()) {
  196. fkSettingsEle.addAttribute(ATTR_ENABLED, ATTR_VALUE_TRUE);
  197. }else {
  198. fkSettingsEle.addAttribute(ATTR_ENABLED, ATTR_VALUE_FALSE);
  199. }
  200.  
  201. for(FunctionKey functionKey : rsiCloud.getFunctionKeys()) {
  202. Element funcAssignEle = fkSettingsEle.addElement(ELEMENT_FUNCASSIGN);
  203. funcAssignEle.addAttribute(ATTR_ID, String.valueOf(functionKey.getId()));
  204. funcAssignEle.addAttribute(ATTR_SELECTED, ATTR_VALUE_TRUE);
  205. if(functionKey.isFuncAssign()) {
  206. funcAssignEle.addAttribute(ATTR_SELECTED, ATTR_VALUE_TRUE);
  207. }else {
  208. funcAssignEle.addAttribute(ATTR_SELECTED, ATTR_VALUE_FALSE);
  209. }
  210.  
  211. Element displayEle = funcAssignEle.addElement(ELEMENT_DISPLAY);
  212. displayEle.setText(functionKey.getDispalyName());
  213.  
  214. Element funcKeysEle = funcAssignEle.addElement(ELEMENT_FUNCKEYS);
  215. for(FunctionKeyOptions functionKeyOption :functionKey.getFunctionKeyOptions()) {
  216. Element funcEle = funcKeysEle.addElement(ELEMENT_FUNC);
  217. funcEle.setText(functionKeyOption.getChoiceValues());
  218. if(functionKeyOption.isSelected()) funcEle.addAttribute(ATTR_SELECTED, ATTR_VALUE_TRUE);
  219. }
  220.  
  221. }
  222.  
  223. Element webBrowSettingsEle = root.addElement(ELEMENT_WEBBROWSER_NXSETTINGS);
  224. if(rsiCloud.isWebBrowserNXSettings()) {
  225. webBrowSettingsEle.addAttribute(ATTR_ENABLED, ATTR_VALUE_TRUE);
  226. }else {
  227. webBrowSettingsEle.addAttribute(ATTR_ENABLED, ATTR_VALUE_FALSE);
  228. }
  229. Element homePageEle = webBrowSettingsEle.addElement(ELEMENT_HOMEPAGE);
  230. homePageEle.setText(rsiCloud.getHomePageUrl());
  231.  
  232. return writeXML(document, file);
  233. }
  234.  
  235. public static boolean stringToBln(String str) {
  236. if(str != null && ATTR_VALUE_TRUE.equals(str.trim())) {
  237. return true;
  238. }
  239. return false;
  240. }
  241.  
  242. public static String booleanToStr(boolean bln) {
  243. if(bln) {
  244. return ATTR_VALUE_TRUE;
  245. }else {
  246. return ATTR_VALUE_FALSE;
  247. }
  248. }
  249.  
  250. public static void main(String[] args) throws IOException {
  251. /*RSICloudModel rsiCloud = RSICloudXmlParser.parseRSICloudXML();
  252. for(FunctionKey functionKey: rsiCloud.getFunctionKeys()) {
  253. if(functionKey.getId() == 0) {
  254. functionKey.getFunctionKeyOptions().toArray();
  255. }
  256. }*/
  257.  
  258. // createRSICloudXml(null);
  259. System.out.println(initialUrl);
  260. }
  261.  
  262. }

java对xml文件的操作的更多相关文章

  1. 更新java对xml文件的操作

    //更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...

  2. Java 创建xml文件和操作xml数据

    java中的代码 import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; ...

  3. # java对xml文件的基本操作

    下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...

  4. JAVA读取XML文件并解析获取元素、属性值、子元素信息

    JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取  InputStream   DocumentBuilderFactory   Element     Node 前言 最 ...

  5. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...

  6. java 读取XML文件作为配置文件

    首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...

  7. Java 字节流实现文件读写操作(InputStream-OutputStream)

    Java 字节流实现文件读写操作(InputStream-OutputStream) 备注:字节流比字符流底层,但是效率底下. 字符流地址:http://pengyan5945.iteye.com/b ...

  8. java读XML文件

    XML文件设计为传输和存储数据,其焦点为数据内容. HTML设计为用来显示数据, 其焦点为数据外观. XML仅仅是文本文件,任何文本编辑器一般情况下都能对其进行编辑. XML没有预定义的标签,并且设定 ...

  9. java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .

    背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...

随机推荐

  1. Spring Boot 2.x基础教程:使用tinylog记录日志

    tinylog简介 tinylog,与其他各种tiny开头的东西一样,是一个轻量级的开源日志解决方案.它本身只包含两个JAR文件(一个用于API,另一个用于实现),没有任何外部依赖关系.两个JAR文件 ...

  2. 再见收费的Navicat!操作所有数据库就靠它了!

    作为一名开发者,免不了要和数据库打交道,于是我们就需要一款顺手的数据库管理工具.很长一段时间里,Navicat 都是我的首选,但最近更换了一台新电脑,之前的绿色安装包找不到了. 于是就琢磨着,找一款免 ...

  3. 四路4 GSPS@ 12 bit,四路12 GSPS@16 位4T4R 射频芯片AD9988

    一.产品概述 AD9988 是一款高度集成的套件,是北京太速最新研发的,具有四个 16 位.12 GSPS 最大采样率.RF 数模转换器 (DAC) 内核,以及四个 12 位.4 GSPS 速率.RF ...

  4. Solution -「ARC 082D」Sandglass

    \(\mathcal{Description}\)   Link.   一个沙漏内共 \(Xg\) 沙,令初始时上半部分为 A,下半部分为 B.沙漏在 \(r_1,r_2,\cdots,r_n\) 时 ...

  5. soc AXI接口术语和特性

    AXI接口术语和特性 1.outstanding 2.interleaving 3.out-of-oder 4.写数据可以优先于写地址 5.大小端 小端:低地址数据放在总线bus的低位. 大端:低地址 ...

  6. MXNet源码分析 | Gluon接口分布式训练流程

    本文主要基于MXNet1.6.0版本,对Gluon接口的分布式训练过程进行简要分析. 众所周知,KVStore负责MXNet分布式训练过程中参数的同步,那么它究竟是如何应用在训练中的呢?下面我们将从G ...

  7. Dubbo源码剖析六之SPI扩展点的实现之Adaptive功能实现原理

    接Dubbo源码剖析六之SPI扩展点的实现之getExtensionLoader - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)继续分析Adaptive功能实现原理.Adaptive的主 ...

  8. FreeHttp2.3升级说明

    一.升级方法 下载新版本插件 https://files.cnblogs.com/files/lulianqi/FreeHttp2.3.0zip  或 http://lulianqi.com/file ...

  9. webshell安全教程防止服务器被破解

    直接上传取得webshell 因过滤上传文件不严,导致用户能够直接上传webshell到网站恣意可写目录中,然后拿到网站的办理员操控权限. 2 增加修正上传类型 现在很多脚本程序上传模块不是只允许上传 ...

  10. MyBatis分页插件PageHelper使用方法

    1.导入相关依赖坐标 <!-- MyBatis分页插件 --> <dependency> <groupId>com.github.pagehelper</gr ...