Java建立以及讀寫xml文件(dom方式)
阿新 • • 發佈:2019-01-01
參考資料:http://hi.baidu.com/zhangxun_yu/blog/item/68bded1d5df36f004134171e.htmlpackage myXML; import org.w3c.dom.*; import org.xml.sax.*; import java.io.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*; public class myXML { /** * @param args */ private Document document = null; public void createXml(String fileName) {//建立xml文件 try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); this.document = db.newDocument();//建立xml與解析xml不同的地方 document.normalize(); } catch(ParserConfigurationException e) { System.out.println(e.getMessage()); } Element root = this.document.createElement("krpano");//建立根節點 this.document.appendChild(root); TransformerFactory tf = TransformerFactory.newInstance(); try { Transformer transformer = tf.newTransformer(); DOMSource source = new DOMSource(document); PrintWriter pw = new PrintWriter(new FileOutputStream(fileName)); StreamResult result = new StreamResult(pw); transformer.transform(source, result); System.out.println("生成XML檔案成功"); } catch(TransformerConfigurationException e) { System.out.println(e.getMessage()); } catch(IllegalArgumentException e) { System.out.println(e.getMessage()); } catch(FileNotFoundException e) { System.out.println(e.getMessage()); } catch(TransformerException e) { System.out.println(e.getMessage()); } } public void parserXML(String fileName) {//解析xml文件 try { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); this.document = db.parse(fileName); //解析xml與建立xml不同的地方 this.document.normalize(); //Document document = db.parse(fileName); } catch(ParserConfigurationException e) { System.out.println(e.getMessage()); } NodeList employees = document.getChildNodes(); for(int i = 0; i < employees.getLength(); i++) { Node employee = employees.item(i); NodeList employeeInfo =employee.getChildNodes(); for(int j = 0; j < employeeInfo.getLength(); j++) { Node node = employeeInfo.item(j); NodeList employeeMeta = node.getChildNodes(); for(int k = 0;k < employeeMeta.getLength(); k++) { System.out.println(employeeMeta.item(k).getNodeName() + ":" + employeeMeta.item(k).getTextContent()); } } } System.out.println("解析完畢"); } catch(FileNotFoundException e) { System.out.println(e.getMessage()); } catch(SAXException e) { System.out.println(e.getMessage()); } catch(IOException e) { System.out.println(e.getMessage()); } } public void addNode(String fileName, String nodeName, String fatherNodeName) {//在一指定的xml文件中,父節點下新增一個節點 try { //得到DOM解析器的工廠例項 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //從DOM工廠裡獲取DOM解析器 DocumentBuilder db = dbf.newDocumentBuilder(); //解析XML文件,得到document, 即DOM樹 this.document = db.parse(fileName); //去掉XML文件中作為格式化內容的空白而對映在DOM樹中的不必要的Text Node物件 this.document.normalize(); //建立一個標籤 Element myname =document.createElement(nodeName);//建立一個節點 // myname.setAttribute("name", "xxxx");//為該標籤新增名字屬性 // Element mybook=document.createElement("mybook"); // mybook.setAttribute("id", "Date Structure"); // mybook.setAttribute("name", "423"); //新增父子關係 // myname.appendChild(mybook); //將標籤新增到父標籤裡 Element fatherElement=(Element)document.getElementsByTagName(fatherNodeName).item(0); fatherElement.appendChild(myname); //儲存xml文件 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(document); //設定編碼型別 transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); StreamResult result = new StreamResult(new FileOutputStream(fileName)); //把DOM樹轉換為xml文件 transformer.transform(source, result); System.out.println("節點新增完畢"); } catch(Exception e) { System.out.println(e.getMessage()); } } public static void main(String[] args) { // TODO Auto-generated method stub myXML dd=new myXML(); String XMLName="D:/mykrpano.xml"; //建立xml文件 dd.createXml(XMLName); //解析xml文件 // dd.parserXML(str); dd.addNode(XMLName, "image", "krpano"); } }