อ่านไฟล์ xml ในเครื่องและแยกวิเคราะห์ผ่าน DOM ลักษณะของการแยกวิเคราะห์ DOM คือการโหลดไฟล์ xml ทั้งหมดลงในหน่วยความจำเพื่อสร้างโครงสร้างแผนผัง DOM
คุณลักษณะของการแยกวิเคราะห์ DOM คือการอ่านไฟล์ xml และแปลงเป็นโครงสร้างต้นไม้ dom และสำรวจผ่านโหนด
นี่คือแนวคิดเกี่ยวกับโหนดของ W3c
หาก XML มีข้อมูลจำนวนมาก DOM จะไม่เหมาะสำหรับการแยกวิเคราะห์ XML ที่มีข้อมูลจำนวนมาก เนื่องจากลักษณะของการโหลด XML ลงในหน่วยความจำในครั้งเดียว เมื่อมีการรวม xml จำนวนมาก การแยกวิเคราะห์ด้วย SAX จะช่วยประหยัดหน่วยความจำ
ต่อไปนี้เป็นตัวอย่างของการใช้ DOM เพื่อแยกวิเคราะห์ไฟล์ xml:
โครงสร้างไฟล์ xml เป็นดังนี้:
<?xml version="1.0" encoding="ISO-8859-1"?><bookstore> <book category="cooking"> <title lang="en">ภาษาอิตาลีในชีวิตประจำวัน</title> <author>Giada De Laurentiis </author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="en">Harry Potter</title> <author>J เค. โรว์ลิ่ง</ผู้เขียน> <ปี>2005</year> <price>29.99</price> </book> <book category="web"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</ ผู้แต่ง> <ปี>2003</year> <price>49.99</price> </book> <book category="web" cover="paperback"> <title lang="en">Learning XML</title> < ผู้แต่ง>เอริค ที. เรย์</author> <ปี>2003</year> <ราคา>39.95</price> </book></ร้านหนังสือ>
สร้างคลาสเพื่อแยกวิเคราะห์ xml ดังนี้:
แพ็คเกจ xml.dom; นำเข้า java.io.File; นำเข้า javax.xml.parsers.DocumentBuilder; นำเข้า javax.xml.parsers.DocumentBuilderFactory; นำเข้า org.w3c.dom.Document; นำเข้า org.w3c.dom.Element; นำเข้า org .w3c.dom.Node;นำเข้า org.w3c.dom.NodeList;คลาสสาธารณะ ReadXmlFile { สาธารณะคงเป็นโมฆะ main (สตริง [] args) { ลอง { ไฟล์ xmlFile = ไฟล์ใหม่ ("src/resource/book.xml"); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance (); เอกสาร doc = builder.parse(xmlFile); doc.getDocumentElement().normalize(); System.out.println("องค์ประกอบรูท: "+doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("book"); 0 ; i<nList.getLength();i++){ โหนดโหนด = nList.item(i); System.out.println("ชื่อโหนด: "+ node.getNodeName()); องค์ประกอบ ele = (องค์ประกอบ) โหนด; System.out.println("---------------- ------------"); if(node.getNodeType() == Element.ELEMENT_NODE){ System.out.println("หมวดหมู่หนังสือ: "+ ele.getAttribute("category")) ; System.out.println("ชื่อหัวข้อ: "+ ele.getElementsByTagName("title").item(0).getTextContent()); System.out.println("ชื่อผู้แต่ง: "+ele.getElementsByTagName("ผู้แต่ง").item(0).getTextContent()); System.out.println("ปี :"+ele.getElementsByTagName("ปี").item(0).getTextContent()); System.out.println("price : "+ele.getElementsByTagName("ราคา").item(0).getTextContent() ); System.out.println("-------------------------");
ผลการวิเคราะห์:
องค์ประกอบหลัก: ร้านหนังสือชื่อโหนด: หนังสือ ------------------------------- หมวดหมู่หนังสือ: ชื่อเรื่องการทำอาหาร: ภาษาอิตาลีในชีวิตประจำวันชื่อผู้แต่ง: Giada De Laurentiisปี :2005ราคา : 30.00 ----------------------------- ชื่อโหนด: หนังสือ ------------------- --- -------หมวดหนังสือ: เด็กๆชื่อชื่อเรื่อง: แฮร์รี่ พอตเตอร์ชื่อผู้แต่ง: เจ.เค. โรว์ลิ่งปี :2005ราคา : 29.99 ----------------------- -- ชื่อโหนด: หนังสือ ------------------------------- หมวดหมู่หนังสือ: ชื่อเว็บ: XQuery Kick Startauthor ชื่อ: James McGovernyear:2003ราคา: 49.99-------------------------ชื่อโหนด: หนังสือ------------- --------------- หมวดหมู่หนังสือ: ชื่อเว็บ: Learning XMLชื่อผู้แต่ง: Erik T. Rayyear:2003ราคา: 39.95----------------- --------
ข้างต้นคือการได้รับค่าที่สอดคล้องกันผ่านชื่อ
ต่อไปนี้เป็นเอาต์พุตโดยใช้โหนดลูป:
รหัสสำหรับโหมดเอาต์พุตโหนดลูปเป็นดังนี้:
แพ็คเกจ xml.dom; นำเข้า java.io.File; นำเข้า javax.xml.parsers.DocumentBuilder; นำเข้า javax.xml.parsers.DocumentBuilderFactory; นำเข้า org.w3c.dom.Document; นำเข้า org.w3c.dom.NamedNodeMap; นำเข้า org .w3c.dom.Node;นำเข้า org.w3c.dom.NodeList; ReadXmlFile2 คลาสสาธารณะ { สาธารณะคงเป็นโมฆะ main (String [] args) { ลอง { ไฟล์ xmlFile = ไฟล์ใหม่ ("src/resource/book.xml"); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance () ; DocumentBuilder builder = builderFactory.newDocumentBuilder(); เอกสาร doc = builder.parse(xmlFile); doc.getDocumentElement().normalize(); System.out.println("องค์ประกอบรูท: "+doc.getDocumentElement().getNodeName()); if(doc.hasChildNodes()){ printNode (doc.getChildNodes()); } }catch(ข้อยกเว้น e){ e.printStackTrace(); } } โมฆะคงที่สาธารณะ printNode (NodeList nodeList) { System.out.println ("------------------------"); // System.out.println (nodeList. getLength()); for(int i = 0; i<nodeList.getLength(); i++){ โหนด node = (Node)nodeList.item(i); if(node.getNodeType() == Node.ELEMENT_NODE){ System.out.println("ชื่อโหนด: "+node.getNodeName()); System.out.println("ค่าโหนด: "+node.getTextContent()); if(node.hasAttributes()){ NamedNodeMap = node.getAttributes(); for(int j = 0; j < nodeMap.getLength(); j++){ โหนด nodenew = nodeMap.item(j); System.out.println("ชื่อโหนด "+nodenew.getNodeName()); System.out.println("ค่าโหนด "+nodenew.getNodeValue() } } ถ้า(node.hasChildNodes ()){ printNode(node.getChildNodes()); } } } }}
ผลลัพธ์จะเป็นดังนี้:
องค์ประกอบหลัก: ร้านหนังสือ ------------------------------- ชื่อโหนด: ร้านหนังสือค่าโหนด: ทุกวัน ภาษาอิตาลี Giada De Laurentiis 2005 30.00 น. Harry Potter J K. Rowling 2005 29.99 XQuery Kick Start James McGovern 2003 49.99 การเรียนรู้ XML Erik T. Ray 2003 39.95 ------------------ ชื่อโหนด: booknode มูลค่า: Giada De Laurentiis ภาษาอิตาลีทุกวัน 2005 30.00 ชื่อโหนดหมวดหมู่ค่าโหนดการทำอาหาร ------------------------------- ชื่อโหนด: ชื่อค่าโหนด: ภาษาอิตาลีทุกวันชื่อโหนดค่า langnode ค่า en------- ------------------ ชื่อโหนด: ผู้แต่งค่าโหนด: Giada De Laurentiis ----------------------- - ชื่อโหนด: ปีมูลค่าโหนด: 2005 ----------- ชื่อโหนด: ราคามูลค่าโหนด: 30.00----------- - ------------ ชื่อโหนด: มูลค่าโหนดหนังสือ: Harry Potter JK. Rowling 2005 29.99 หมวดหมู่ชื่อโหนดค่าโหนดเด็ก ------------------------ ชื่อโหนด: ชื่อค่าโหนด: Harry Potterชื่อโหนดค่า langnode en------- ----------------ชื่อโหนด: ผู้แต่งค่าโหนด: J K. Rowling------------------------ -------- ชื่อโหนด: ค่าโหนดปี: 2005 ---------- ชื่อโหนด: ราคาค่าโหนด: 29.99---- -------- ------------ ชื่อโหนด: ค่า booknode: XQuery Kick Start James McGovern 2003 49.99 ชื่อโหนด ค่า categorynode เว็บ ------------------------ ชื่อโหนด: ค่า titlenode: XQuery Kick Startnode ชื่อค่า langnode en ---------- --------------- ชื่อโหนด: authornode ค่า: James McGovern --------------------------- node ชื่อ: ปีมูลค่าโหนด: 2003 -------------------------------- ชื่อโหนด: ราคามูลค่าโหนด: 49.99----- ----------- -------- ชื่อโหนด: booknode ค่า: การเรียนรู้ XML Erik T. Ray 2003 39.95 ชื่อโหนดหมวดหมู่ค่าโหนดชื่อเว็บโหนด ค่า covernode หนังสือปกอ่อน ---------------------------- ชื่อโหนด: ค่า titlenode: การเรียนรู้ชื่อ XMLnode ค่า langnode en ---------- - ------------ชื่อโหนด: ผู้แต่งค่าโหนด: Erik T. Ray-------------------------- ชื่อโหนด : ค่าโหนดปี: 2003 ------------------------ ชื่อโหนด: ค่าโหนดราคา: 39.95 --------------- - ----------
คำถามเกี่ยวกับโหนด:
<book category="cooking"> <title lang="en">ภาษาอิตาลีทุกวัน</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </ หนังสือ>
สำหรับแอปพลิเคชันหนังสือ: doc.getChildNodes() รับ NodeList โดยที่ความยาวของ NodeList คือ 9
โหนดทั้ง 9 มีดังนี้:
โหนดหัวเรื่อง
โหนดภาษา
โหนดทุกวัน
โหนดผู้เขียน
โหนด Giada De Laurentiis
โหนดปี
โหนดปี 2548
โหนดราคา
30.00 น. โหนด