DOM เป็นเครื่องมือแยกวิเคราะห์ที่มีประสิทธิภาพซึ่งเหมาะสำหรับเอกสารขนาดเล็ก
ทำไมคุณถึงพูดอย่างนั้น? เพราะมันจะโหลดเอกสาร xml ทั้งหมดลงในหน่วยความจำเพื่อสร้างแผนผังออบเจ็กต์เอกสาร
โดยรวมแล้วมันฟังดูน่ากลัว แต่การใช้มันเพื่ออ่านสิ่งเล็กๆ น้อยๆ นั้นค่อนข้างสะดวกเมื่อเทียบกับ Sax
สำหรับการดำเนินการเพิ่มและการลบ ฯลฯ ฉันไม่ได้วางแผนที่จะเขียนมัน เมื่อฉันกำลังดูบทช่วยสอน ฉันเกือบจะอาเจียนเพราะโค้ดที่น่าเกลียด
เป็นเพราะเหตุนี้เองที่ทำให้เครื่องมือเช่น jdom และ dom4j มีอยู่ในภายหลัง...
ไม่พูดอะไรมาก แค่ไปที่โค้ด
ตัวอย่างการแยกวิเคราะห์ Dom
นำเข้า javax.xml.parsers.DocumentBuilder;
นำเข้า javax.xml.parsers.DocumentBuilderFactory;
นำเข้า org.w3c.dom.Document;
นำเข้า org.w3c.dom.Element;
นำเข้า org.w3c.dom.NamedNodeMap;
นำเข้า org.w3c.dom.Node;
นำเข้า org.w3c.dom.NodeList;
การสาธิตชั้นเรียนสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) พ่นข้อยกเว้น {
//สร้างอินสแตนซ์โรงงาน parser และสร้าง parser
โรงงาน DocumentBuilderFactory = DocumentBuilderFactory.newInstance();
ตัวสร้าง DocumentBuilder = โรงงาน newDocumentBuilder();
//สร้างวัตถุเอกสารที่ต้องการแยกวิเคราะห์
ไฟล์ f = ไฟล์ใหม่ ("books.xml");
//แยกวิเคราะห์เอกสารและส่งคืนออบเจ็กต์ Document ในขณะนี้ เอกสาร xml ถูกโหลดลงในหน่วยความจำแล้ว
//เอาล่ะ มาทำให้การแยกวิเคราะห์เข้มข้นขึ้น ที่เหลือก็แค่รับข้อมูล
เอกสาร doc = builder.parse(f);
// รับองค์ประกอบรูทของเอกสาร
//คุณถามฉันว่าทำไมฉันถึงทำเช่นนี้ เพราะวัตถุเอกสารนั้นเป็นโครงสร้างต้นไม้และนี่คือรากของต้นไม้
//แน่นอน คุณสามารถค้นหาคอลเล็กชันองค์ประกอบได้โดยตรงและข้ามขั้นตอนนี้ไป
รากองค์ประกอบ = doc.getDocumentElement();
//พบโหนดรูทด้านบน และที่นี่เราเริ่มรับการรวบรวมองค์ประกอบภายใต้โหนดรูท
รายการ NodeList = root.getElementsByTagName("หนังสือ");
สำหรับ (int i = 0; i < list.getLength(); i++) {
//ค้นหาโหนดในคอลเลกชันผ่านเมธอด item() และแปลงมันลงไปเป็นอ็อบเจ็กต์ Element
องค์ประกอบ n = (องค์ประกอบ) list.item(i);
// รับแผนผังแอตทริบิวต์ในวัตถุ ใช้ for loop เพื่อแยกและพิมพ์
โหนด NamedNodeMap = n.getAttributes();
สำหรับ (int x = 0; x < node.getLength(); x++) {
โหนด nn = node.item (x);
System.out.println(nn.getNodeName() + ": " + nn.getNodeValue());
-
//พิมพ์เนื้อหาองค์ประกอบ โค้ดมีความซับซ้อนมาก เกือบจะเป็นรูปแบบคงที่
System.out.println("title: " +n.getElementsByTagName("title").item(0).getFirstChild().getNodeValue());
System.out.println("ผู้เขียน: " + n.getElementsByTagName("ผู้เขียน").item(0).getFirstChild().getNodeValue());
System.out.println();
-
-
-
ผลลัพธ์ที่ได้: