1. 程式人生 > >Java解析XML檔案的常用方法介紹

Java解析XML檔案的常用方法介紹

  1 import java.io.IOException;
  2 
  3 import javax.xml.parsers.DocumentBuilder;
  4 import javax.xml.parsers.DocumentBuilderFactory;
  5 import javax.xml.parsers.ParserConfigurationException;
  6 import javax.xml.transform.Transformer;
  7 import javax.xml.transform.TransformerConfigurationException;
8 import javax.xml.transform.TransformerException; 9 import javax.xml.transform.TransformerFactory; 10 import javax.xml.transform.dom.DOMSource; 11 import javax.xml.transform.stream.StreamResult; 12 13 import org.w3c.dom.Document; 14 import org.w3c.dom.Element; 15 import org.w3c.dom.Node;
16 import org.w3c.dom.NodeList; 17 import org.xml.sax.SAXException; 18 19 public class DOM { 20 21 public static void main(String[] args) { 22 // TODO Auto-generated method stub 23 try { 24 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 25
// 建立DOM解析器工廠 26 DocumentBuilder db = dbf.newDocumentBuilder(); 27 // 呼叫DOM解析器工廠的newDocumentBuilder()方法得到DOM解析器物件 28 Document doc = db.parse("src\\name.xml"); 29 // 呼叫DOM解析器物件parse(String uri)方法得到Document物件 30 NodeList nl = doc.getElementsByTagName("name"); 31 // 呼叫Document物件的getElementsByTagName(String tagname)方法得到NodeList物件 32 /* 33 * 遍歷XML中的元素 34 */ 35 for (int i = 0; i < nl.getLength(); i++) { 36 Node node = nl.item(i); 37 // 通過NodeList的item(int index)方法得到NodeList中的Node物件 38 Element element = (Element) node; 39 // 通過Node物件強制轉換的方法得到Element物件 40 String id = element.getAttribute("id"); 41 // 通過Element物件的getgetAttribute(String name)方法得到id屬性值 42 System.out.println(id); 43 // 列印id屬性值 44 String age = element.getElementsByTagName("age").item(0).getTextContent(); 45 // 通過Element物件的getElementsByTagName(String name)方法得到age的屬性值 46 System.out.println(age); 47 // 列印age 48 } 49 /* 50 * 新增元素到XML中 51 */ 52 Element root = doc.getDocumentElement(); 53 // 通過Document物件的getDocumentElement()方法得到根節點 54 Element newname = doc.createElement("name"); 55 // 通過Document物件的createElement(String tagName)方法得到新的name元素 56 newname.setAttribute("id", "小明"); 57 // 通過呼叫Element物件的setAttribute(String name,String value)方法為id賦值 58 Element newage = doc.createElement("age"); 59 // 通過Document物件的createElement(String tagName)方法得到新的age元素 60 newage.setTextContent("18"); 61 // 通過呼叫Element物件的setTextContent(String textContent)方法為age賦值 62 newname.appendChild(newage); 63 // 新增age到name中 64 root.appendChild(newname); 65 // 新增name到根節點中 66 /* 67 * 修改XML中的元素 68 */ 69 for (int i = 0; i < nl.getLength(); i++) { 70 Element fixname = (Element) nl.item(i); 71 // 得到要修改的Element物件 72 String fixnewname = fixname.getAttribute("id"); 73 // 獲取到要修改物件的id屬性值 74 /* 75 * 判斷name是否為要修改的物件 76 */ 77 if (fixnewname.equals("小明")) { 78 Element sex = doc.createElement("sex"); 79 // 建立新的Element物件 80 sex.setAttribute("sex", "男"); 81 // 給新的Element物件的屬性賦值 82 fixname.appendChild(sex); 83 // 新增新的Element(sex)物件到Element(fixname)物件中 84 } 85 } 86 /* 87 * 刪除XML中的元素 88 */ 89 root.removeChild(root.getChildNodes().item(7)); 90 // 首先通過根節點訪問子節點,得到Node物件,然後呼叫根節點的removeChild(Node oldChild)方法刪除元素 91 /* 92 * 將更改寫入到XML檔案中 93 */ 94 TransformerFactory tf = TransformerFactory.newInstance(); 95 // 呼叫TransformerFactory的newInstance()方法得到TransformerFactory物件 96 Transformer t = tf.newTransformer(); 97 // 呼叫TransformerFactory物件的newTransformer()方法得到Transformer物件 98 t.transform(new DOMSource(doc), new StreamResult("src\\name.xml")); 99 // 呼叫Transformer物件的transform(Source xmlSource,Result 100 // outputTarget)方法將修改寫入到name.xml檔案中 101 } catch (ParserConfigurationException e) { 102 // TODO Auto-generated catch block 103 e.printStackTrace(); 104 } catch (SAXException e) { 105 // TODO Auto-generated catch block 106 e.printStackTrace(); 107 } catch (IOException e) { 108 // TODO Auto-generated catch block 109 e.printStackTrace(); 110 } catch (TransformerConfigurationException e) { 111 // TODO Auto-generated catch block 112 e.printStackTrace(); 113 } catch (TransformerException e) { 114 // TODO Auto-generated catch block 115 e.printStackTrace(); 116 } 117 } 118 119 }