原XML格式如下:
要將它轉(zhuǎn)換為如下的格式:
百度了好久,網(wǎng)上都沒(méi)有XML添加父節(jié)點(diǎn)的例子,最初想用最笨的方法一個(gè)Element一個(gè)Element的添加,那個(gè)實(shí)在太笨了股囊。看著節(jié)點(diǎn)名字差不多就想有沒(méi)有類似模糊查詢的方法更啄,然后考慮xpath稚疹,正則表達(dá)式來(lái)獲取又對(duì)這倆不熟,最后想了好久祭务,想到是根據(jù)名字來(lái)獲取的内狗,就是字符串啊,然后就用的String.contains()來(lái)匹配的义锥。下面上代碼柳沙。
import java.io.File;
import java.io.FileWriter;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.dom.DOMDocumentFactory;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
- @author 陳文五
/
public class XmlTest {
/*
@param InPath 要轉(zhuǎn)換的XML文件路徑
@param eleName1 父節(jié)點(diǎn)名(子節(jié)點(diǎn)名的一部分)
@param eleName2 父節(jié)點(diǎn)名(子節(jié)點(diǎn)名的一部分)
-
@param OutPath 轉(zhuǎn)換后的XML輸出路徑
*/
public static void changeXML(String InPath,String eleName1,String eleName2,String OutPath) {
Document doc = DOMDocumentFactory.getInstance().createDocument();
SAXReader reader = new SAXReader();
File file = new File(InPath);
Document document;
try {
document = reader.read(file);
Element root = document.getRootElement();
Element r = DocumentHelper.createElement(root.getName());
doc.add(r);
Element e = DocumentHelper.createElement(eleName1);Element ele = DocumentHelper.createElement(eleName2); List eleList = root.elements(); for(Element element:eleList){ if(element.getName().contains(eleName1)){ e.add((Element)(element.clone())); }else if(element.getName().contains(eleName2)){ ele.add((Element)(element.clone())); }else{ r.add((Element)(element.clone())); } } r.add(e); r.add(ele); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("gb2312"); XMLWriter writer = new XMLWriter( new FileWriter(new File(OutPath)), format); writer.write(doc); writer.close(); } catch (DocumentException e) { e.printStackTrace(); }catch (Exception e){ e.printStackTrace(); }
}
}
以上就是最終的代碼,中間卡在了添加節(jié)點(diǎn)在同一層父節(jié)點(diǎn)下拌倍,卡了我快一個(gè)小時(shí)赂鲤。那么給出之前的代碼,聰明如你柱恤,看一看體會(huì)一下問(wèn)題是出在哪里数初,怎么解決的。
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.dom.DOMDocumentFactory;
import org.dom4j.dom.DOMElement;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class XmlTest {
public static void changeXML(String inPath,String eleName1,String eleName2,String outPath) {
Document doc = DOMDocumentFactory.getInstance().createDocument();
SAXReader reader = new SAXReader();
File file = new File(inPath);
Document document;
try {
document = reader.read(file);
Element root = document.getRootElement();
DOMElement r = (DOMElement) doc.addElement(root.getName());
List eleList = root.elements();
for(Element element:eleList){
if(element.getName().contains(eleName1)){
int index = 0;
Element e = null;
if(e==null){
e = r.addElement(eleName1);
}e.add((Element)(element.clone()));
}else if(element.getName().contains(eleName2)){
Element ele = null;
if(ele==null){
ele = r.addElement(eleName2);
}
ele.add((Element)(element.clone()));
}else{
r.add((Element)(element.clone()));
}
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gb2312");
XMLWriter writer = new XMLWriter(
new FileWriter(new File("E://new.xml")), format);
writer.write(doc);
writer.close();} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
}
}
這是幫一同進(jìn)公司的妹子做的題梗顺,由于公司項(xiàng)目大量使用XML泡孩,幫忙做的同時(shí)自己也鞏固一下dom4j。寫這篇文章也是給廣大受xml折磨的同志一個(gè)例子荚守,畢竟在自己做這道題的時(shí)候網(wǎng)上都沒(méi)有找到給xml添加父節(jié)點(diǎn)的例子珍德,也害得我花了兩個(gè)多小時(shí)才解決。有什么問(wèn)題疑問(wèn)也歡迎留言矗漾。以上。