DOM:
直接一次性將XML文件讀取到內存中,所以可以跨節點讀取所需要的數據
適合服務器開發
import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.*; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class Demo{ public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException { xmlTest(); } public static void xmlTest() throws ParserConfigurationException, SAXException, IOException { //創建一個DOM解析器工廠對象; DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); //通過工廠對象創建DOM解析器 DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); //解析文檔 InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("com\\first\\person.xml"); Document doc = documentBuilder.parse(resourceAsStream);//doc 即為樹狀結構的存儲對象,在內存中; ArrayList<Person> personList = new ArrayList<>(); NodeList XMLpersonlist = doc.getElementsByTagName("person"); Person person = null; for (int i = 0; i <XMLpersonlist.getLength(); i++) { person = new Person(); //獲取屬性值 String p_id = XMLpersonlist.item(i).getAttributes().getNamedItem("person_id").getNodeValue(); person.setId(p_id); NodeList childNodes = XMLpersonlist.item(i).getChildNodes(); for (int j = 0; j < childNodes.getLength(); j++) { Node children_node = childNodes.item(j); String node_name = children_node.getNodeName(); if ("name".equals(node_name)){ //把文本也看成一個節點,<name>zy</name> 中zy當做節點;children_node.getFirstChild()表示獲取zy這個節點; //zy.getNodeValue() 獲取的值就是zy; String p_name = children_node.getFirstChild().getNodeValue(); person.setName(p_name); }else if ("age".equals(node_name)){ String p_age = children_node.getFirstChild().getNodeValue(); person.setAge(p_age); } } personList.add(person); } personList.forEach((p)->System.out.println(p)); } } class Person{ private String name; private String age; private String id; public void setName(String name) { this.name = name; } public void setAge(String age) { this.age = age; } public void setId(String id) { this.id = id; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", id='" + id + '\'' + '}'; } }
XML文件
<?xml version="1.0" encoding="UTF-8" ?> <Person> <person person_id="p1"> <name>zy</name> <age>18</age> </person> <person person_id="p2"> <name>zt</name> <age>20</age> </person> </Person>