您的位置:首页 > 编程语言 > Java开发

java dom4j新增,删除,修改,生成,导出XML

2016-08-13 11:22 417 查看
公司升级资源包,不想每次更新都下载整个资源包,所以就想生成XML,在XML里记录哪些文件有变动,更新时直接下载变动的文件即可,XML格式如下
<?xml version="1.0" encoding="UTF-8" ?>
- <Package>
- <version flag="1-4">
- <Add>
- <add>
<uri>adduri4</uri>
<path>addpath4</path>
</add>
- <add>
<uri>adduri5</uri>
<path>addpath5</path>
</add>
- <add>
<uri>adduri6</uri>
<path>addpath6</path>
</add>
</Add>
- <Update>
- <update>
<uri>adduri3</uri>
<path>addpath3</path>
</update>
</Update>
<Delete />
</version>
- <version flag="2-4">
- <Add>
- <add>
<uri>adduri4</uri>
<path>addpath4</path>
</add>
- <add>
<uri>adduri4</uri>
<path>addpath4</path>
</add>
- <add>
<uri>adduri5</uri>
<path>addpath5</path>
</add>
- <add>
<uri>adduri6</uri>
<path>addpath6</path>
</add>
</Add>
<Update />
<Delete />
</version>
- <version flag="3-4">
- <Add>
- <add>
<uri>adduri5</uri>
<path>addpath5</path>
</add>
- <add>
<uri>adduri5</uri>
<path>addpath5</path>
</add>
- <add>
<uri>adduri6</uri>
<path>addpath6</path>
</add>
</Add>
<Update />
<Delete />
</version>
</Package>

每次新增版本,XML更新成各个历史版本到最新版本的变化,uri与path在界面填写,其余自动生成

util代码如下public class PackageUpgradeUtil{

@SuppressWarnings({ "rawtypes" })
public static Document updateXML(Document doc,String addItem,String deleteItem,String updateItem,String highestVersion){
List versionList=(List) doc.getRootElement().elements("version");
for(int i=0;i<versionList.size();i++){
Element versionEl=(Element) versionList.get(i);
versionEl.attribute("flag").setValue(versionEl.attribute("flag").getValue().substring(0, versionEl.attribute("flag").getValue().indexOf("-")+1)+highestVersion);
versionEl=checkAddEl(versionEl, addItem, updateItem, deleteItem);
}
return doc;
}

@SuppressWarnings("rawtypes")
public static Element checkAddEl(Element versionEl,String addItem,String updateItem,String deleteItem){
List addEl=versionEl.elements("Add");
String[] deletes=deleteItem.split(";");
String[] updates=updateItem.split(";");
if(addEl!=null){
List addElChildrenEl=((Element)addEl.get(0)).elements("add");
for(int i=0;i<addElChildrenEl.size();i++){
if(!Tools.isEmptyOrNull(deleteItem)){
for(int j=0;j<deletes.length;j++){
if(((((Element) ((Element)(addElChildrenEl.get(i))).elements("uri").get(0)).getText())).equals(deletes[j])){
((Element)addElChildrenEl.get(i)).getParent().remove((Element)addElChildrenEl.get(i));
}
}
}
if(!Tools.isEmptyOrNull(updateItem)){
for(int z=0;z<updates.length;z++){
if(((((Element) ((Element)(addElChildrenEl.get(i))).elements("uri").get(0)).getText())).equals(updates[z].split(",")[0])){
((Element)addElChildrenEl.get(i)).getParent().remove((Element)addElChildrenEl.get(i));
}
}
}
}

Element el=(Element)(versionEl.elements("Add").get(0));
String[] adds=addItem.split(";");
if(!Tools.isEmptyOrNull(addItem)){
for(int i=0;i<adds.length;i++){
String[] add=adds[i].split(",");
Element newAddElChildrenEl=el.addElement("add");
Element uriEl=newAddElChildrenEl.addElement("uri");
Element pathEl=newAddElChildrenEl.addElement("path");
uriEl.setText(add[0]);
pathEl.setText(add[1]);
}
}
}
return updateUpdateEl(versionEl, addItem, updateItem, deleteItem);
}

@SuppressWarnings("rawtypes")
public static Element updateUpdateEl(Element versionEl,String addItem,String updateItem,String deleteItem){
List updateEl=versionEl.elements("Update");
String[] deletes=deleteItem.split(";");

List updateElChildrenEl=((Element)updateEl.get(0)).elements("update");
if(!Tools.isEmptyOrNull(deleteItem)){
for(int i=0;i<updateElChildrenEl.size();i++){
for(int j=0;j<deletes.length;j++){
if(((((Element) ((Element)(updateElChildrenEl.get(i))).elements("uri").get(0)).getText())).equals(deletes[j])){
((Element)updateElChildrenEl.get(i)).getParent().remove((Element)updateElChildrenEl.get(i));
}
}
}
}

Element el=(Element)(versionEl.elements("Update").get(0));
// List updateElChildrenEl=el.elements("update");
if(!Tools.isEmptyOrNull(updateItem)){
String[] updates=updateItem.split(";");
for(int i=0;i<updates.length;i++){
boolean flag=false;
for(int j=0;j<updateElChildrenEl.size();j++){
if(((((Element) ((Element)(updateElChildrenEl.get(j))).elements("uri").get(0)).getText())).equals(updates[i].split(",")[0])){
flag=true;
}
}
if(!flag){
String[] update=updates[i].split(",");
Element newUpdateElChildrenEl=el.addElement("update");
Element uriEl=newUpdateElChildrenEl.addElement("uri");
Element pathEl=newUpdateElChildrenEl.addElement("path");
uriEl.setText(update[0]);
pathEl.setText(update[1]);
}
}
}

return updateDeleteEl(versionEl, addItem, deleteItem);
}

@SuppressWarnings("rawtypes")
public static Element updateDeleteEl(Element versionEl,String addItem,String deleteItem){
List deleteEl=versionEl.elements("Delete");
String[] adds=addItem.split(";");
if(deleteEl!=null){
List deleteElChildrenEl=((Element)deleteEl.get(0)).elements("delete");
if(!Tools.isEmptyOrNull(addItem)){
for(int i=0;i<deleteElChildrenEl.size();i++){
for(int j=0;j<adds.length;j++){
if(((((Element) ((Element)(deleteElChildrenEl.get(i))).elements("uri").get(0)).getText())).equals(adds[j].split(",")[0])){
((Element)deleteElChildrenEl.get(i)).getParent().remove((Element)deleteElChildrenEl.get(i));
Element el=(Element)(versionEl.elements("Update").get(0));
Element newUpdateElChildrenEl=el.addElement("update");
Element uriEl=newUpdateElChildrenEl.addElement("uri");
Element pathEl=newUpdateElChildrenEl.addElement("path");
uriEl.setText(adds[j].split(",")[0]);
pathEl.setText(adds[j].split(",")[1]);
}
}
}
}
if(!Tools.isEmptyOrNull(deleteItem)){
Element el=(Element)(versionEl.elements("Delete").get(0));
String[] deletes=deleteItem.split(";");
for(int i=0;i<deletes.length;i++){
Element newDeleteElChildrenEl=el.addElement("delete");
Element uriEl=newDeleteElChildrenEl.addElement("uri");
uriEl.setText(deletes[i]);
}
}
}
return versionEl;
}

public static Document addVersion(Document doc,String addItem,String updateItem,String deleteItem,String highestVersion,String preHighestVersion) throws IOException{
Element root=doc.getRootElement();
Element versionEL=root.addElement("version");
versionEL.addAttribute("flag",preHighestVersion+"-"+highestVersion);
Element addEl=versionEL.addElement("Add");
Element updateEl=versionEL.addElement("Update");
Element deleteEl=versionEL.addElement("Delete");
if(!Tools.isEmptyOrNull(addItem)){

String[] adds=addItem.replace("\n", "").split(";");
for(int i=0;i<adds.length;i++){
String[] add=adds[i].split(",");
Element addElChildrenEl=addEl.addElement("add");
Element uriEl=addElChildrenEl.addElement("uri");
Element pathEl=addElChildrenEl.addElement("path");
uriEl.setText(add[0]);
pathEl.setText(add[1]);
}

}

if(!Tools.isEmptyOrNull(deleteItem)){

String[] deletes=deleteItem.replace("\n", "").split(";");
for(int i=0;i<deletes.length;i++){
String delete=deletes[i];
Element deleteElChildrenEl=deleteEl.addElement("delete");
Element uriEl=deleteElChildrenEl.addElement("uri");
uriEl.setText(delete);
}

}

if(!Tools.isEmptyOrNull(updateItem)){
String[] updates=updateItem.replace("\n", "").split(";");
for(int i=0;i<updates.length;i++){
String[] update=updates[i].split(",");
Element updateElChildrenEl=updateEl.addElement("update");
Element uriEl=updateElChildrenEl.addElement("uri");
Element pathEl=updateElChildrenEl.addElement("path");
uriEl.setText(update[0]);
pathEl.setText(update[1]);
}

}
return doc;

}

public static void writeFile(Document doc,String ossPath,String fileName,String localPath){
try{
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码
format.setEncoding("UTF-8");
// 创建XMLWriter对象,指定了写出文件及编码格式
XMLWriter writer;
writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File(localPath)), "UTF-8"), format);
// 写入
writer.write(doc);
// 立即写入
writer.flush();
// 关闭操作
writer.close();
File file=new File(localPath);
OSSFileUtil.uploadFile(file, ossPath, fileName);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java xml dom4j