既然能在代碼中解析XML文檔獲取數據,當然也能通過代碼動態生成XML文檔了。
與解析XML一樣,生成XML文檔也是用到了那4種方法。
一:DOM方法生成XML
步驟:
1:創建DocumentBuilder:DocumentBuilder builder=new DocumentBuilder();
2:創建dom對象:Document dom=builder.newDocument();
3:創建dom中元素:Element element=dom.createElement("元素名");
4:向元素添加子節點:element.appendChild(childElement);(dom樹就是通過不停appendChild形成的)
5:向元素設置屬性:element.setAttribute("屬性名","屬性值");
6:向元素添加文本內容:element.setTextContent("標簽間內容");
7:把根元素添加至dom中:dom.appendChild(rootElement);(由於子節點都是添加到根結點下的,所以把根結點添加到dom就相當於把整棵標簽樹添加進dom了)
8:把dom對象導出到xml文件:
1)創建轉換器工廠:TransformerFactory factory=TransformerFactory.newInstance();
2)由工廠創建轉換器實例:Transformer transformer=factory.newTransformer();
3)設置轉換格式:transformer.setOutputProperty(屬性,屬性值);//設置輸出到文檔時的格式,比如:換行等
4)由轉換器把dom資源轉換到結果輸出流,而結果輸出流連接到一個xml文件:transformer.transform(new DOMSourse(dom),new StreamResult(xml_file));
二:SAX方法操作XML
步驟:
1:創建SAX轉換器工廠:SAXTransformerFactory factory=SAXTransformerFactory.newInstance();
2:創建轉換handler:TransformerHandler handler=factory.newTransformerHandler();
3:由handler創建轉換器:Transformer transformer=handler.getTransformer();
4:設置轉換格式:transformer.setOutputProperty(屬性,屬性值);//設置輸出到文檔時的格式,比如:換行等
5:創建Result連接到xml文件:Result res=new StreamResult(new FileOutputStream(xml_file));
6:關聯result到handler:handler.setResult(res);
7:利用handler操作xml文件:
1)打開dom對象:handler.startDocument();
2)創建元素:handler.startElement(uri,命名空間,元素名,屬性列表);//沒有則填null
3)創建子結點:handler.startElement(uri,命名空間,子元素名,屬性列表);//在一個start與end的元素之間添加的結點就是它的子節點
4)為結點添加屬性:上面start的元素名 element.setAttribute("","","屬性名","屬性值");
5)為結點添加文本內容:在一個element的start與end之間,handler.characters(byte[],start,length);//byte就是文本內容,后面可以進行截取
5)鏡像結束元素:hanlder.endElement("","",元素名);//前面有start,操作完這個結點后切記要end,添加鏡像結束標簽。
6)關閉dom對象:handler.endDocument();
原理:通過result關聯到xml文檔,通過handler開始一個標簽、設置標簽屬性、添加文本、結束一個標簽方法操作result從而改變xml文檔內容。
三:JDOM方法生成XML
步驟:創建根結點,由根結點創建dom對象,然后從根結點開始構造dom樹,最后輸出dom對象到xml文檔即可。
1:生成根節點:Element root=new Element(“節點名”);
2:設置根結點屬性:root.setAttribute(屬性名,屬性值);
3:把根作為參數創建dom對象:Document dom=new Document(root);
4:從根結點開始構造dom樹:
1)創建結點:Element element=new Element("節點名");
2)設置結點屬性:element.setAttribute(屬性名,屬性值);
3)設置結點文本內容:element.setText(文本內容);
4)添加結點到父節點下:father.addContent(child);
5:dom樹構造完畢,進行輸出:
1)創建XMLOutputer:XMLOutputer outputer=new XMLOutputer(format);//format參數可選,可以創建一個format對象設置輸出格式,比如換行、編碼格式等
2)通過outputer把dom對象輸出到xml文檔:outputer.output(dom,new FileOutputStream(xml_file));
四:DOM4j生成XML
步驟:
1:創建dom對象:Document dom=new Document();
2:創建根節點:Element rooe=dom.addElement("根節點名");
3:為根結點設置屬性:element.setAttribute(屬性名,屬性值);
4:由根結點構建dom樹:
1)創建子節點:Element element=father.addElement("節點名");
2)設置結點屬性:element.setAttribute(屬性名,屬性值);
3)設置結點文本內容:element.setText(文本);
5:構建dom樹完畢,把dom對象輸出到xml文件:
1)創建XMLWriter:XMLWriter writer=new XMLWriter(new FileOutputStream(xml_file),format);//format參數可選,可以傳一個format對象指定輸出格式
2)設置輸出到文檔時是否轉義:writer.setEscapeText(false);//true轉義
3)通過writer把dom對象寫到xml文檔中:wtiter.write(dom);