当前位置: 代码迷 >> Java Web开发 >> dom4j解析xml有关问题
  详细解决方案

dom4j解析xml有关问题

热度:213   发布时间:2016-04-17 10:26:22.0
dom4j解析xml问题
Java code
package com.huateng.util;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.OutputStreamWriter;import java.net.MalformedURLException;import java.util.List;import org.dom4j.*;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class ExtraUtil {    Document doc = null;    Element rootElement = null;    String label = null;    String editor = null;    boolean createLabel = false;    boolean createEditor = false;    public ExtraUtil(Document doc,String label,String editor){        this.doc = doc;        this.rootElement = doc.getRootElement();        this.label = label;        this.editor = editor;        this.init();    }    public void init() {         if(this.label!=null&&!this.label.equals("")){            this.createLabel = true;        }        if(this.editor!=null&&!this.editor.equals("")){            this.createEditor = true;        }        //如果一个label标签都没有,添加FieldLabels        if(this.createLabel){            if(this.rootElement.selectNodes("FieldLabels").size()==0){                this.rootElement.addElement("FieldLabels");            }        }        //如果一个editor标签都没有,添加Editors        if(this.createEditor){            if(this.rootElement.selectNodes("Editors").size()==0){                this.rootElement.addElement("Editors");            }        }}     public static Document read(String fileName) throws MalformedURLException, DocumentException {            SAXReader reader = new SAXReader();            Document document = reader.read(new File(fileName));           System.out.println(document.getStringValue());           return document;         }     public static void main(String[] args) {        //对应xml的位置        String docPath = "D:\\work\\SICS\\WEB-INF\\ExtraUtilTest.xml";        //对应的dataset名字        String datasetName = "GlobalData";        //要添加的label的后缀,如果不需要生成label=""即可        String label = "Label";        //要添加的editor的后缀        String editor = "";                try{            Document doc = ExtraUtil.read(docPath);            ExtraUtil extraUtil = new ExtraUtil(doc,label,editor);            //Element rootElement = doc.getRootElement();                        Element datasetElement = extraUtil.getDataSetByName(datasetName);            if(datasetElement==null) throw new Exception("不存在的dataset");                        extraUtil.createLabel(datasetElement);                        //去掉换行                        //转换为window格式                        //写入原文件            XMLWriter output;            OutputFormat format = OutputFormat.createCompactFormat();            format.setEncoding("UTF-8");            //输出文件时定义已UTF-8形成文档            FileWriter fileWriter = new FileWriter(docPath);            OutputStreamWriter out = new OutputStreamWriter(                    new FileOutputStream(docPath),"UTF-8");            //out.write(doc.getStringValue());            //out.close();            output = new XMLWriter(fileWriter, format);            output.write(doc);            output.close();        }catch(Exception e){            e.printStackTrace();        }    }        public Element getDataSetByName(String datasetName) {             List datasets = ((Element)this.rootElement.selectNodes("Datasets").get(0)).selectNodes("Dataset");            for(int i=0;i<datasets.size();i++){                Element dataset = (Element)datasets.get(i);                Node datasetId = dataset.selectSingleNode("id");                if(datasetId.getText().equals(datasetName)){                    return dataset;                }            }           return null;    }         public Element createLabel(Element datasetElement) {         Element fieldLabelsElement = null;        Element editorsElement = null;        String datasetName = datasetElement.selectSingleNode("id").getText();        if(this.createLabel) {            fieldLabelsElement = (Element)this.rootElement.selectNodes("FieldLabels").get(0);        }        if(this.createEditor){            editorsElement = (Element)this.rootElement.selectNodes("Editors").get(0);        }        List datasetFields = ((Element)datasetElement.selectNodes("Fields").get(0)).selectNodes("Field");                //getLabelOrEditorMaxIndex();        for(int i=0;i<datasetFields.size();i++){            String fieldName = ((Element)datasetFields.get(i)).selectSingleNode("name").getText();            if(fieldName.equals("AvailRecord")||fieldName.equals("sqlResend")||fieldName.equals("ibps_sql_id")){                continue;            }            if(this.createLabel){                Element fieldLabelElement = fieldLabelsElement.addElement("FieldLabel");                Element e1 = fieldLabelElement.addElement("dataField");                e1.setText(fieldName);                Element e2 = fieldLabelElement.addElement("dataset");                e2.setText(datasetName);                Element e3 = fieldLabelElement.addElement("id");                e3.setText(fieldName+this.label);            }                        if(this.createEditor){                Element editorElement = editorsElement.addElement("Editor");                Element e4 = editorElement.addElement("dataField");                e4.setText(fieldName);                Element e5 = editorElement.addElement("dataset");                e5.setText(datasetName);                Element e6 = editorElement.addElement("id");                e6.setText(fieldName+this.editor);                Element e7 = editorElement.addElement("width");                e7.setText("200");            }        }       return null;    } }
  相关解决方案