ในตอนแรก ภาษา XML มีวัตถุประสงค์เพื่อใช้แทนภาษา HTML เท่านั้น อย่างไรก็ตาม เนื่องจากภาษามีการพัฒนาและปรับปรุงอย่างต่อเนื่อง ผู้คนจึงค้นพบข้อดีของมันมากขึ้น เช่น ภาษามาร์กอัปที่ขยายได้ และข้อกำหนดทางไวยากรณ์ที่เข้มงวด ความสามารถในการใช้งาน มาร์กอัปที่มีความหมาย การแยกการจัดเก็บเนื้อหาและการนำเสนอ และข้อดีอื่นๆ ทำให้ภาษามีความยอดเยี่ยมตั้งแต่แรกเกิด ภาษา XML ได้เข้าสู่ยุคของการพัฒนาอย่างรวดเร็วหลังจากกลายเป็นมาตรฐาน W3C แน่นอนว่าข้อดีและข้อดีต่างๆ ของตัวมันเองได้กำหนดให้ผู้ผลิตเทคโนโลยีรายใหญ่ชื่นชอบภาษานี้อย่างรวดเร็วเช่นกัน เพื่อเป็นการตอบสนอง มีเครื่องมือมากมายเพื่อรองรับ XML บทความนี้จะแนะนำเทคโนโลยีหลักหลายประการสำหรับการประมวลผล XML ใน Java จากมุมมองนี้ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ
Java มีคลาสไลบรารีและเครื่องมือที่ยอดเยี่ยมอะไรบ้างเพื่ออำนวยความสะดวกให้กับโปรแกรมเมอร์ในการประมวลผล XML
การแนะนำวิธีการแยกวิเคราะห์ XML สามวิธี: DOM ที่มีชื่อเสียง
ไม่ใช่เรื่องเกินจริงที่จะบอกว่ามันมีชื่อเสียง DOM เป็น API มาตรฐาน W3C สำหรับการประมวลผล XML MS.NET เป็นต้น มาตรฐานนี้ได้กลายเป็นวิธีการประมวลผล XML ที่ใช้กันอย่างแพร่หลาย แน่นอนว่า เพื่อที่จะมอบฟังก์ชันที่มีประสิทธิภาพมากขึ้นเรื่อยๆ Java จึงมีคลาสเครื่องมือส่วนขยายโดยตรงจำนวนมากสำหรับ DOM เช่น JDOM, DOM4J เป็นต้น ซึ่งโปรแกรมเมอร์ Java หลายคนคุ้นเคย โดยพื้นฐานแล้วจะเป็นส่วนขยายของฟังก์ชันอินเทอร์เฟซ DOM และคงไว้ DOM จำนวนมาก เนื่องจากคุณลักษณะของ API ทำให้โปรแกรมเมอร์ DOM ดั้งเดิมจำนวนมากเชี่ยวชาญการใช้งานอีกสองตัวโดยไม่มีอุปสรรคใด ๆ วิธีการที่ใช้งานง่ายและใช้งานง่ายทำให้โปรแกรมเมอร์ Java ส่วนใหญ่ชื่นชอบอย่างมาก
SAX สีเขียวและเป็นมิตรกับสิ่งแวดล้อม
การเกิดขึ้นของ SAX มีความต้องการพิเศษ เหตุใดจึงกล่าวว่าเป็นสีเขียวและเป็นมิตรกับสิ่งแวดล้อม เนื่องจาก SAX ใช้ทรัพยากรระบบน้อยที่สุดและวิธีการแยกวิเคราะห์ที่เร็วที่สุดเพื่อให้การสนับสนุนสำหรับการประมวลผล XML แต่วิธีการค้นหาที่ยุ่งยากที่มาพร้อมกับมันยังสร้างปัญหามากมายให้กับโปรแกรมเมอร์ ซึ่งมักจะทำให้เกิดอาการปวดหัว ขณะเดียวกันการรองรับฟังก์ชันการสืบค้น XPath ทำให้ผู้คนรักและเกลียดมัน
Digester ที่ไม่ชัดเจน: JavaBeanization ของ XML
Digester เป็นโครงการโอเพ่นซอร์สภายใต้มูลนิธิ Apache ความเข้าใจของผู้เขียนมาจากการวิจัยเกี่ยวกับกรอบงาน Struts คุณจะพบกับปัญหาดังกล่าว: เทคโนโลยีใดที่ใช้ที่ด้านล่างของกรอบงานเพื่อแยกวิเคราะห์ไฟล์การกำหนดค่ากรอบงานต่างๆ ที่ทำเครื่องหมายด้วยภาษา XML? การแยกวิเคราะห์ DOM นั้นใช้เวลานาน การแยกวิเคราะห์ SAX นั้นยุ่งยากเกินไป และระบบโอเวอร์เฮดของการแยกวิเคราะห์แต่ละครั้งจะสูงเกินไป ดังนั้น ทุกคนจึงคิดว่าควรใช้ JavaBeans ที่สอดคล้องกับโครงสร้าง XML เพื่อโหลดข้อมูลนี้ และ Digester ก็เกิดขึ้น การเกิดขึ้นครั้งนี้ทำให้มีอินเทอร์เฟซการทำงานที่สะดวกสบายสำหรับความต้องการในการแปลง XML ให้เป็นอ็อบเจ็กต์ JavaBean เพื่อให้ความต้องการที่คล้ายกันมากขึ้นสามารถได้รับโซลูชันที่สมบูรณ์แบบยิ่งขึ้น และโปรแกรมเมอร์ก็ไม่จำเป็นต้องใช้ขั้นตอนการแยกวิเคราะห์ที่ยุ่งยากอีกต่อไป ในเวลาเดียวกัน SUN ยังได้เปิดตัวคลาสเครื่องมือการแปลง XML และ JavaBean JAXB และผู้อ่านที่สนใจสามารถเรียนรู้เกี่ยวกับสิ่งนี้ได้ด้วยตนเอง
ลองดูตัวอย่าง Java dom parsing XML:
นำเข้า java.io.*; นำเข้า org.w3c.dom.*; นำเข้า org.xml.sax.SAXException; นำเข้า javax.xml.parsers.*; โรงงาน = DocumentBuilderFactory.newInstance(); ลอง { DocumentBuilder builder = Factory.newDocumentBuilder(); builder.parse(ไฟล์ใหม่("E://work//test//xml1.xml")); NodeList nl = doc.getElementsByTagName("book"); สำหรับ (int i = 0; i < nl.getLength( ); i++) { System.out.println(nl.item(i).getAttributes().item(0)); System.out.println(doc.getElementsByTagName("title").item(i) .getFirstChild().getNodeValue()); System.out.println(doc.getElementsByTagName("title").item(i) .getAttributes ().รายการ(0)); System.out.println(doc.getElementsByTagName("author").item(i) .getFirstChild().getNodeValue()); System.out.println(doc.getElementsByTagName("ปี").item(i) .getFirstChild ().getNodeValue()); System.out.println(doc.getElementsByTagName("price").item(i) .getFirstChild().getNodeValue()); System.out.println(); } } จับ (ParserConfigurationException e) { e.printStackTrace() ; } catch (SAXException e) { e.printStackTrace(); } จับ (IOException e) { e.printStackTrace(); } } }
xml:
<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">แฮร์รี่ พอตเตอร์</title> <ผู้เขียน>เจ เค. โรว์ลิ่ง</ผู้เขียน> <ปี>2005</year> <ราคา>29.99 </ราคา> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95< /ราคา> </หนังสือ> </ร้านหนังสือ>
ผลลัพธ์:
category="COOKING"Everyday Italianlang="en"Giada De Laurentiis200530.00category="CHILDREN"Harry Potterlang="en"J K. Rowling200529.99category="WEB"Learning XMLlang="en"Erik T. Ray200339.95