มาอ่าข้อมูลที่เป็นภาษาไทยใน XML โดยใช้ JDOM กัน ตอนที่ 1
posted on 14 Dec 2004 12:50 by somkiatวันนี้มีเพื่อนๆ มาถามเกี่ยวกับปัญหาการอ่านข้อมูลภาษาไทยใน xml file ซึ่งส่วนใหญ่แล้วมักจะเกิดปัญหาในขณะที่ทำการอ่านภาษาไทยนั่นเอง ทำให้ xml parser throws exception ออกมา
ดังนั้นผมจึงแนะนำให้เพื่อนๆ ใช้ JDom API กัน ซึ่งสามารถ download ได้ที่ http://www.jdom.org
ถ้าอยากรู้ว่ามันดีอย่างไรลองไปอ่านที่ http://www.oreillynet.com/pub/a/mediakit/pressrelease/20000427.html
แต่อ่านแล้วก็ไม่เท่ากับการได้ลองใช้หรอกนะครับ
เอาเป็นว่าเรามาเริ่มต้นด้วยการอ่านข้อมูลจาก xml file กันเลยดีกว่า
โดยขั้นตอนการใช้งาน JDOM จะต้องทำดังนี้
1. สร้าง instance ของตัว parser ขึ้นมาโดยเราจะใช้ SAX
org.jdom.input.SaxBuilder builder = new org.jdom.input.SaxBuilder();
2. สร้าง XML Document โดยอ่านข้อมูลมาจาก xml file
org.jdom.Document document = builder.build(new File("test.xml"));
3. แสดงข้อมูลออกมาทาง console (System.out)
org.jdom.output.XMLOutputter fmt = new org.jdom.output.XMLOutputter();
fmt.output(document, System.out);
ดังนั้น Code ที่ได้ทั้งหมดจะเป็นดังนี้
public static void readXML() {
try {
//Build the document with SAX and Xerces, no validation
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(new File("test.xml"));
//Output the document, use standard formatter
XMLOutputter fmt = new XMLOutputter();
fmt.output(document, System.out);
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ต่อมาถ้าต้องการจะอ่านข้อมูลที่เป็นภาษาไทยใน xml file ล่ะจะทำอย่างไร
จะต้องทำดังนี้นะครับ ให้เปิด notepad ขึ้นมาครับแล้วพิมพ์ข้อมูลไป เช่น
<?xml version="1.0" encoding="UTF-8"?>
<root>
<test>ทดสอบ</test>
</root>
หลังจากนั้นก็ทำการ save file ครับ ตรงนี้แหละครับสำคัญ จะต้องทำการเลือก encoding ให้เป็น UTF-8 ครับเท่านี้ก็ save เลยครับ
จาก code การอ่าน xml file ข้างต้น เราก็สามารถอ่านข้อมูลใน xml file มาแสดงทั้งหมด ซึ่งจะออกมาทาง console ครับ
ต่อมาถ้าเราต้องการจะอ่านข้อมูลที่อยู่ใน tag <test> ล่ะเราจะทำอย่างไร
คำตอบ ไม่ยากครับ สามารถทำได้ดังนี้
SAXBuilder builder = new SAXBuilder();
Document document = builder.build(new File("test.xml"));
//Read xml data
Element root = document.getRootElement();
String value = root.getChild("test").getText();
System.out.println(value);
เห็นแล้วใช่ไหมครับว่าการใช้ JDOM API มาอ่านxmlfileนั้นไม่ยากเลย
ในตอนต่อไปผมจะเสนอการสร้างเอกสาร xmlด้วย JDOM นะครับ

ผมทำตามที่พี่เขียนแล้วครับ
แต่ทำไมตอน run มันถึงฟ้องว่า
org.jdom.input.JDOMParseException: Error on line 1 of document file:/D:/test.xml: Document root element is missing.
ขอบคุณครับ
#1 By wiscuit (161.246.1.33) on 2004-12-15 01:50