dom4j解析xml问题
Java codepackage 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; } }