java对xml文件的操作

2019/05/31 16:46
阅读数 11

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

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部