java对xml文件的操作
xml文件格式(示例):
<?xml version="1.0" encoding="UTF-8"?> <root>
<FunctionKeySettings enabled="true">
<FuncAssign id="0" selected="true">
<Display>System Home</Display>
<FuncKeys>
<Func selected="true">System Home</Func>
<Func>EZ Charger Suite</Func>
<Func>RSI Home</Func>
<Func>Web Browser NX</Func>
<Func>ESA Transformer</Func>
<Func>Print/Scan (Memory Storage Device)</Func>
<Func>Printer (Smart)</Func>
<Func>Printer (Classic)</Func>
<Func>Copy (Smart)</Func>
<Func>Copier (Classic)</Func>
<Func>Scanner (Smart)</Func>
<Func>Scanner (Classic)</Func>
</FuncKeys>
</FuncAssign>
<FuncAssign id="1" selected="true">
<Display>RSI Homerrrrr</Display>
<FuncKeys>
<Func>System Home</Func>
<Func>EZ Charger Suite</Func>
<Func selected="true">RSI Home</Func>
<Func>Web Browser NX</Func>
<Func>ESA Transformer</Func>
<Func>Print/Scan (Memory Storage Device)</Func>
<Func>Printer (Smart)</Func>
<Func>Printer (Classic)</Func>
<Func>Copy (Smart)</Func>
<Func>Copier (Classic)</Func>
<Func>Scanner (Smart)</Func>
<Func>Scanner (Classic)</Func>
</FuncKeys>
</FuncAssign>
<FuncAssign id="2" selected="true">
<Display>EZ Charger Suite</Display>
<FuncKeys>
<Func>System Home</Func>
<Func selected="true">EZ Charger Suite</Func>
<Func>RSI Home</Func>
<Func>Web Browser NX</Func>
<Func>ESA Transformer</Func>
<Func>Print/Scan (Memory Storage Device)</Func>
<Func>Printer (Smart)</Func>
<Func>Printer (Classic)</Func>
<Func>Copy (Smart)</Func>
<Func>Copier (Classic)</Func>
<Func>Scanner (Smart)</Func>
<Func>Scanner (Classic)</Func>
</FuncKeys>
</FuncAssign>
</FunctionKeySettings>
<WebBrowserNXSettings enabled="true">
<HomePage>https://www.na.smart-integration.ricoh.com/si-apps/pub/index.html</HomePage>
</WebBrowserNXSettings>
</root>
对文件的操作:更新、新建、实例化
package com.ricoh.rapp.deploymenttool.device; import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element; import com.ricoh.rapp.deploymenttool.ui.RSICloudModel;
import com.ricoh.rapp.deploymenttool.ui.RSICloudModel.FunctionKey;
import com.ricoh.rapp.deploymenttool.ui.RSICloudModel.FunctionKeyOptions;
import com.ricoh.rapp.deploymenttool.util.Consts;
import com.ricoh.rapp.deploymenttool.util.XmlParser; public class RSICloudXmlParser extends XmlParser{ private static final Log logger = LogFactory.getLog(RSICloudXmlParser.class); private static final File file = new File(Consts.RSICLOUD_FILE_PATH);
private static final File initialFile = new File(Consts.RSICLOUD_INITIAL_FILE_PATH); public static final String initialUrl = "https://www.na.smart-integration.ricoh.com/si-apps/pub/index.html"; private static final String ELEMENT_ROOT = "root";
private static final String ELEMENT_FUNCTIONKEY_SETTINGS = "FunctionKeySettings";
private static final String ELEMENT_FUNCASSIGN = "FuncAssign";
private static final String ELEMENT_DISPLAY = "Display";
private static final String ELEMENT_FUNCKEYS = "FuncKeys";
private static final String ELEMENT_FUNC = "Func";
private static final String ELEMENT_WEBBROWSER_NXSETTINGS = "WebBrowserNXSettings";
private static final String ELEMENT_HOMEPAGE = "HomePage";
private static final String ATTR_ENABLED = "enabled";
private static final String ATTR_ID = "id";
private static final String ATTR_SELECTED = "selected";
private static final String ATTR_VALUE_TRUE = "true";
private static final String ATTR_VALUE_FALSE = "false"; public static RSICloudModel parseRSICloudXML(){
logger.info("parseRSICloudXML file: " + initialFile.getName());
logger.info("parseRSICloudXML file: " + file.getName());
Document document = null;
if(file.exists()) {
document = readXML(file);
}else {
document = readXML(initialFile);
} return xmlFileToBean(document);
} public static RSICloudModel resetParseRSICloudXML(){
logger.info("parseRSICloudXML file: " + initialFile.getName());
Document document = readXML(initialFile);
return xmlFileToBean(document);
} private static RSICloudModel xmlFileToBean(Document document) {
RSICloudModel rsiCloud = new RSICloudModel();
if(document == null) {
return rsiCloud;
}
Element root = document.getRootElement();
if(root == null) {
return rsiCloud;
}
Element fkSettingsEle = root.element(ELEMENT_FUNCTIONKEY_SETTINGS);
Element wbSettingsEle = root.element(ELEMENT_WEBBROWSER_NXSETTINGS);
if (fkSettingsEle == null && wbSettingsEle == null) {
return rsiCloud;
} String fkEnabled = fkSettingsEle.attributeValue(ATTR_ENABLED);
rsiCloud.setFunctionKeySettings(stringToBln(fkEnabled));
List<FunctionKey> functionKeys = new ArrayList<>();
for(Iterator rsiCloudsIterator = fkSettingsEle.elementIterator(ELEMENT_FUNCASSIGN); rsiCloudsIterator.hasNext();) {
Element funcAssignEle = (Element) rsiCloudsIterator.next();
FunctionKey FunctionKey = rsiCloud.new FunctionKey();
String id = funcAssignEle.attributeValue(ATTR_ID);
String isSelected = funcAssignEle.attributeValue(ATTR_SELECTED);
String dispalyName = funcAssignEle.element(ELEMENT_DISPLAY).getText(); FunctionKey.setId(Integer.parseInt(id));
FunctionKey.setFuncAssign(stringToBln(isSelected));
FunctionKey.setDispalyName(dispalyName);
List<FunctionKeyOptions> functionKeyOptions = new LinkedList<>();
for(Iterator funcIterator = funcAssignEle.element(ELEMENT_FUNCKEYS).elementIterator(ELEMENT_FUNC); funcIterator.hasNext();) {
Element funcEle = (Element) funcIterator.next();
FunctionKeyOptions functionKeyOption = rsiCloud.new FunctionKeyOptions();
String selectedOpt = funcEle.attributeValue(ATTR_SELECTED);
String optValue = funcEle.getText();
functionKeyOption.setSelected(stringToBln(selectedOpt));
functionKeyOption.setChoiceValues(optValue);
functionKeyOptions.add(functionKeyOption);
}
FunctionKey.setFunctionKeyOptions(functionKeyOptions); functionKeys.add(FunctionKey);
} rsiCloud.setFunctionKeys(functionKeys);
String wbEnabled = wbSettingsEle.attributeValue(ATTR_ENABLED);
rsiCloud.setWebBrowserNXSettings(stringToBln(wbEnabled));
String homePageUrl = wbSettingsEle.element(ELEMENT_HOMEPAGE).getText();
rsiCloud.setHomePageUrl(homePageUrl);
return rsiCloud;
} public static boolean saveCustomSettings(RSICloudModel rsiCloud) {
if(file.exists()) {
return updateRSICloudXML(rsiCloud);
}else {
return createRSICloudXml(rsiCloud);
}
} public static boolean updateRSICloudXML(RSICloudModel rsiCloud) {
Document document = readXML(file);
if(document == null || rsiCloud == null) {
return false;
}
Element root = document.getRootElement(); Element fkSettingsEle = root.element(ELEMENT_FUNCTIONKEY_SETTINGS); boolean functionKeySettings = rsiCloud.isFunctionKeySettings();
fkSettingsEle.addAttribute(ATTR_ENABLED, booleanToStr(functionKeySettings)); List<FunctionKey> functionKeys = rsiCloud.getFunctionKeys(); for(Iterator rsiCloudsIterator = fkSettingsEle.elementIterator(ELEMENT_FUNCASSIGN); rsiCloudsIterator.hasNext();) {
Element funcAssignEle = (Element) rsiCloudsIterator.next(); int id = Integer.parseInt(funcAssignEle.attributeValue(ATTR_ID)); for(FunctionKey functionKey : functionKeys) {
if(functionKey.getId() == id) {
boolean isSelected = functionKey.isFuncAssign();
funcAssignEle.addAttribute(ATTR_SELECTED, booleanToStr(isSelected));
String displayName = functionKey.getDispalyName().trim();
funcAssignEle.element(ELEMENT_DISPLAY).setText(displayName); for(Iterator funcIterator = funcAssignEle.element(ELEMENT_FUNCKEYS).elementIterator(ELEMENT_FUNC); funcIterator.hasNext();) {
Element funcEle = (Element) funcIterator.next();
String funcValue = funcEle.getText();
List<FunctionKeyOptions> functionKeyOptions = functionKey.getFunctionKeyOptions();
for(FunctionKeyOptions functionKeyOption : functionKeyOptions) {
if(functionKeyOption.isSelected() && funcValue.trim().equals(functionKeyOption.getChoiceValues().trim())) {
funcEle.addAttribute(ATTR_SELECTED, booleanToStr(true));
} if(!functionKeyOption.isSelected() && funcValue.trim().equals(functionKeyOption.getChoiceValues().trim())) {
funcEle.remove(funcEle.attribute(ATTR_SELECTED));
}
}
}
}
}
} Element wbSettingsEle = root.element(ELEMENT_WEBBROWSER_NXSETTINGS);
boolean webBrowserSetting = rsiCloud.isWebBrowserNXSettings();
wbSettingsEle.addAttribute(ATTR_ENABLED, booleanToStr(webBrowserSetting));
String homePageUrl = rsiCloud.getHomePageUrl();
wbSettingsEle.element(ELEMENT_HOMEPAGE).setText(homePageUrl); writeXML(document, file); return true;
} private static boolean createRSICloudXml(RSICloudModel rsiCloud) {
if(file.isFile() && file.exists()) {
return true;
}else {
try {
file.createNewFile();
} catch (IOException e) {
logger.error("createRSICloudXml failed:File name: " + file.getName() + ", File path:" + file.getAbsolutePath()
+ ", IOException:" + e.getMessage());
}
}
if(rsiCloud == null) return false; Document document = DocumentHelper.createDocument(); Element root = document.addElement(ELEMENT_ROOT);
Element fkSettingsEle = root.addElement(ELEMENT_FUNCTIONKEY_SETTINGS);
if(rsiCloud.isFunctionKeySettings()) {
fkSettingsEle.addAttribute(ATTR_ENABLED, ATTR_VALUE_TRUE);
}else {
fkSettingsEle.addAttribute(ATTR_ENABLED, ATTR_VALUE_FALSE);
} for(FunctionKey functionKey : rsiCloud.getFunctionKeys()) {
Element funcAssignEle = fkSettingsEle.addElement(ELEMENT_FUNCASSIGN);
funcAssignEle.addAttribute(ATTR_ID, String.valueOf(functionKey.getId()));
funcAssignEle.addAttribute(ATTR_SELECTED, ATTR_VALUE_TRUE);
if(functionKey.isFuncAssign()) {
funcAssignEle.addAttribute(ATTR_SELECTED, ATTR_VALUE_TRUE);
}else {
funcAssignEle.addAttribute(ATTR_SELECTED, ATTR_VALUE_FALSE);
} Element displayEle = funcAssignEle.addElement(ELEMENT_DISPLAY);
displayEle.setText(functionKey.getDispalyName()); Element funcKeysEle = funcAssignEle.addElement(ELEMENT_FUNCKEYS);
for(FunctionKeyOptions functionKeyOption :functionKey.getFunctionKeyOptions()) {
Element funcEle = funcKeysEle.addElement(ELEMENT_FUNC);
funcEle.setText(functionKeyOption.getChoiceValues());
if(functionKeyOption.isSelected()) funcEle.addAttribute(ATTR_SELECTED, ATTR_VALUE_TRUE);
} } Element webBrowSettingsEle = root.addElement(ELEMENT_WEBBROWSER_NXSETTINGS);
if(rsiCloud.isWebBrowserNXSettings()) {
webBrowSettingsEle.addAttribute(ATTR_ENABLED, ATTR_VALUE_TRUE);
}else {
webBrowSettingsEle.addAttribute(ATTR_ENABLED, ATTR_VALUE_FALSE);
}
Element homePageEle = webBrowSettingsEle.addElement(ELEMENT_HOMEPAGE);
homePageEle.setText(rsiCloud.getHomePageUrl()); return writeXML(document, file);
} public static boolean stringToBln(String str) {
if(str != null && ATTR_VALUE_TRUE.equals(str.trim())) {
return true;
}
return false;
} public static String booleanToStr(boolean bln) {
if(bln) {
return ATTR_VALUE_TRUE;
}else {
return ATTR_VALUE_FALSE;
}
} public static void main(String[] args) throws IOException {
/*RSICloudModel rsiCloud = RSICloudXmlParser.parseRSICloudXML();
for(FunctionKey functionKey: rsiCloud.getFunctionKeys()) {
if(functionKey.getId() == 0) {
functionKey.getFunctionKeyOptions().toArray();
}
}*/ // createRSICloudXml(null);
System.out.println(initialUrl);
} }
java对xml文件的操作的更多相关文章
- 更新java对xml文件的操作
//更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...
- Java 创建xml文件和操作xml数据
java中的代码 import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; ...
- # java对xml文件的基本操作
下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...
- JAVA读取XML文件并解析获取元素、属性值、子元素信息
JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取 InputStream DocumentBuilderFactory Element Node 前言 最 ...
- java对xml文件做增删改查------摘录
java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...
- java 读取XML文件作为配置文件
首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...
- Java 字节流实现文件读写操作(InputStream-OutputStream)
Java 字节流实现文件读写操作(InputStream-OutputStream) 备注:字节流比字符流底层,但是效率底下. 字符流地址:http://pengyan5945.iteye.com/b ...
- java读XML文件
XML文件设计为传输和存储数据,其焦点为数据内容. HTML设计为用来显示数据, 其焦点为数据外观. XML仅仅是文本文件,任何文本编辑器一般情况下都能对其进行编辑. XML没有预定义的标签,并且设定 ...
- java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .
背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...
随机推荐
- 从服务间的一次调用分析整个springcloud的调用过程(一)
首先我们知道springcloud是一个微服务框架,按照官方文档的说法,springcloud提供了一些开箱即用的功能: 1 分布式/版本化配置 2 服务的注册与发现 3 路由 4 服务到服务之间调用 ...
- Solution -「BZOJ #3786」星系探索
\(\mathcal{Description}\) Link. 给定一棵含 \(n\) 个点的有根树,点有点权,支持 \(q\) 次操作: 询问 \(u\) 到根的点权和: 修改 \(u\) ...
- 我来教你如何将cpu使用率up起来(shell脚本[含注释])
这个脚本是为了逃过一些资源检测的,当一些机器当前使用率偏低,会被客户要求收回,那咋办呢?使用下面的脚本,就可以留住你的机器了 假设要求cpu使用率不能低于35% 使用方法:bash up_up_up. ...
- 使用Sinopia部署私有npm仓库
使用Sinopia部署私有npm仓库 [root@localhost ~]# hostnamectl set-hostname --static npm-server [root@npm-server ...
- SpringBoot2.x设置文件上传文件的大小
The field file exceeds its maximum permitted size of 1048576 bytes spring: # 设置文件上传文件大小 servlet: mul ...
- [LeetCode]1480. 一维数组的动态和
给你一个数组 nums .数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]-nums[i]) . 请返回 nums 的动态和. 示例 1: 输入:nums = [1, ...
- kali linux 静态地址和动态地址的设置
在文件系统里找到/etc/network下的interfaces文件,打开后可以看到eth0为dhcp,将其修改为# This file describes the network interface ...
- 深度测评,商业智能BI、报表工具谁更好用?
在很多人入门数据分析师或者投身大数据行业的时候,必然会听到的两个词就是"报表工具"和"BI商业智能"."BI"一词已被更广泛地知晓,但提起B ...
- yalmip安装
1,将yalmip解压,在matlab中添加路径. 2,yalmiptest测试是否安装成功.
- spark submit local遇到路径hdfs的问题
有时候第一次执行 spark submit --master local[*] 单机模式的时候,可以对linux本地路径进行输出.但是有时候提交到yarn的时候,是自动加上hdfs的路径这没问题, 但 ...