1.项目中加入dom4j的jar

2.基本的读取xml文件为Document对象;将Document对象写入到指定文件中

package com.ricoh.rapp.deploymenttool.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; import com.ricoh.rapp.deploymenttool.util.Consts; public class XmlParser { private final static Log logger = LogFactory.getLog(XmlParser.class);
/**
* Read from xml file.
* @param file
* @return
*/
public static Document readXML(File file) {
Document document = null;
SAXReader saxReader = new SAXReader();
saxReader.setEncoding(Consts.UTF8_ENCODING);
if (!file.exists()) {
String logInfo = "No device/Cloud Connector registered. File " + file.getName() + " not exists.";
logger.debug(logInfo);
return null;
}
try {
document = saxReader.read(file);
} catch (DocumentException e) {
String logInfo = "No device/Cloud Connector registered. File " + file.getName() + " is wrong. ";
if (e != null) {
logInfo = logInfo + e.toString();
}
logger.error(logInfo);
return null;
}
return document;
} public static boolean writeXML(Document document, File file) {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding(Consts.UTF8_ENCODING);
XMLWriter writer = null;
try {
writer = new XMLWriter(new FileOutputStream(file), format);
writer.write(document);
return true;
} catch (IOException e) {
String logInfo = "Write xml file " + file.getName() + " failed!";
logger.error(logInfo);
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
logger.debug("Close file " + file.getName() + " fialed. " + e.toString());
}
}
}
return false;
}
}

3.解析xml文件、修改文件、创建xml文件。

package com.ricoh.rapp.deploymenttool.util;

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);
} }

3.自定义xml文件实例

<?xml version="1.0" encoding="UTF-8"?>

<root>
<FunctionKeySettings enabled="false">
<FuncAssign id="0" selected="true">
<Display>Display node value</Display>
<FuncKeys>
<Func/>
<Func>func node value1</Func>
<Func>func node value2</Func>
<Func selected="true">func node value3</Func>
<Func>func node value4</Func>
</FuncKeys>
</FuncAssign>
<FuncAssign id="1" selected="true">
<Display>Display node value3</Display>
<FuncKeys>
<Func/>
<Func>func node value1</Func>
<Func>func node value2</Func>
<Func>func node value3</Func>
<Func>func node value4</Func>
<Func selected="true">func node value5</Func>
</FuncKeys>
</FuncAssign>
<FuncAssign id="2" selected="false">
<Display></Display>
<FuncKeys>
<Func selected="true"/>
<Func>func node value1</Func>
<Func>func node value2</Func>
<Func>func node value3</Func>
<Func>func node value4</Func>
<Func>func node value5</Func>
<Func>func node value6</Func>
</FuncKeys>
</FuncAssign>
</FunctionKeySettings>
<WebBrowserNXSettings enabled="true">
<HomePage>https://www.baidu.com</HomePage>
</WebBrowserNXSettings>
</root>

使用dom4j处理xml文件的更多相关文章

  1. 【dom4j xml】使用dom4j处理XML文件--测试过程遇到的问题

    首先 关于dom4j的API,有如下: 当然  其中的实体引用有以下: 测试使用环境: 使用Maven搭建web环境,pom.xml文件配置如下: <project xmlns="ht ...

  2. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  3. 用DOM4J解析XML文件案例

    用DOM4J解析XML文件案例,由于DOM4J不像JAXP属于JAVASE里,所以如果要使用DOM4J,则必须额外引入jar包,如图:

  4. 使用DOM4J解析XMl文件与读取XML文件

    XML文件 <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id ...

  5. 使用dom4j对xml文件进行增删改查

    1.使用dom4j技术对dom_demo.xml进行增删改查 首选要下载dom4j的jar包 在官网上找不到,网上搜索了一下在这个链接:http://sourceforge.net/projects/ ...

  6. Dom4j解析Xml文件,Dom4j创建Xml文件

    Dom4j解析Xml文件,Dom4j创建Xml文件 >>>>>>>>>>>>>>>>>>&g ...

  7. 使用dom4j解析xml文件,并封装为javabean对象

    dom4j是一个java的XML api,性能优异.功能强大.易于使用.这里使用dom4j对xml文件进行解析,并完成对文件的封装. 实现对xml文件的解析,主要使用到的是dom4j中的SAXRead ...

  8. 使用dom4j 读取XML文件

    第一次接触dom4j的时候,感觉这个东西很神秘,因为之前虽然知道XML文件吧,但从来没有用过,一直感觉XML肯定不好操作.当得知,dom4j可以很容易的操作读取XML文件时,不免有些好奇,那么,用do ...

  9. DOM4J读取XML文件

    最近在做DRP的项目,其中涉及到了读取配置文件,用到了DOM4J,由于是刚开始接触这种读取xml文件的技术,好奇心是难免的,于是在网上又找了一些资料,这里就结合找到的资料来谈一下读取xml文件的4中方 ...

  10. Java进阶(二十七)使用Dom4j解析XML文件

    使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...

随机推荐

  1. Aselenium前言

    https://seleniumhq.github.io/docs/index.html https://www.seleniumhq.org/ THE SELENIUM BROWSER AUTOMA ...

  2. Java一维与二维数组的拷贝与排序

    Java一维与二维数组的拷贝与排序 目录 Java一维与二维数组的拷贝与排序 Arrays.sort() 一维数组升序排序 二维数组按行升序排序 二维数组按列升序排序 Java中的数组 Java中数组 ...

  3. VNCTF RE复现 (BabyMaze 时空飞行)

    babymaze pyc混淆! 还没反编译出来 只能找个脚本偷字节码 import marshal, dis f = open('babymaze.pyc', 'rb') f.read(4) f.re ...

  4. Solution -「ARC 101D」「AT4353」Robots and Exits

    \(\mathcal{Description}\)   Link.   有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...

  5. windows 使用自带的cmd终端进行文件MD5校验

    1.使用快捷键win+r,调用运行界面,输入cmd后回车 2.输入certutil -hashfile <文件名称> MD5,回车后,即可校验文件的MD5了(注意写绝对路径)

  6. C++奇异递归模板模式

    虚函数的问题 虚函数的主要问题是性能开销比较大,一个虚函数调用可能需要花费数倍于非虚函数调用的时间,尤其是当非虚函数被声明为inline时(注意,虚函数不能被内联). CRTP介绍 CRTP的全称是C ...

  7. Swagger2简单实用

    前后端分离很好用的api <!--swagger--> <dependency> <groupId>io.springfox</groupId> < ...

  8. blender获取任意位置建筑白模

    在前端3d可视化开发过程中有时会需要到白模,特别是gis开发,可能会用到各个城市的白模,其实可以使用Blender配合BlenderGis插件来提取osm中的白模.具体步骤如下: 安装软件 在此处下载 ...

  9. 教你快速区分传统报表和商业智能BI

    很多人分不清楚,传统报表和商业智能BI之间的区别?有些人认为,BI就是做报表的,其实不然,报表只是BI的一部分,报表是关于过去和现状的展示,而BI是关于如何通过分析数据,帮助决策者找到改变和提高的方案 ...

  10. 更快的网络文件系統 — Oxfs

    什麽时候需要网络文件系统 ? 做嵌入式的同学经常会使用 NFS 将 host 上的某个目录挂载到开发板上,方便 host 上编译构建后能直接在板子上运行,减少手工拷贝操作.网站开发时,在 host 上 ...