วันนี้มีเพื่อนๆ มาถามเกี่ยวกับปัญหาการอ่านข้อมูลภาษาไทยใน 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 นะครับ

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet

พี่ครับ รบกวนนิดนึงครับ
ผมทำตามที่พี่เขียนแล้วครับ
แต่ทำไมตอน 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

ตัวอย่างนี้เป็นการอ่านข้อมูลจาก file xml ซึ่งจากตัวอย่างจะอ่าน test.xml ดังนั้นจะต้องสร้าง file นี้ขึ้นมาก่อนนะครับ

<?xml version="1.0" encoding="UTF-8"?>

<root>

<test>ทดสอบ</test>

</root>


ถ้ายังเกิดปัญหาอยู่
คำถามก็คือ สร้าง xml file จาก editor ตัวไหนครับ

#2 By somkiat (203.154.152.254) on 2004-12-15 12:24

ผมสร้างไฟล์ test.xml โดยใช้ notepad แล้ว
save โดยเลือก encoding เป็น UTF-8 ครับ

แล้วผมลอง save ใหม่โดยให้ encoding เป็น ANSI
คราวนี้เมื่อ run แล้วจะไม่มีปัญหาครับ แต่จะทำให้ไม่สามารถใช้ภาษาไทยได้ มันเกี่ยวกับตรงที่ใช้ notepad หรือเปล่าครับ แล้วจะต้องแก้ไขอย่างไรครับ

ขอบคุณพี่มากครับ

#3 By wiscuit (161.246.1.34) on 2004-12-15 21:54

ไม่ทราบว่า environment ของคุณเป็นอย่างไร

เครื่องผมมี spec ดังนี้
1. Windows 2000 pro
2. Local ของเครื่อง English(United State) ครับ
3. ผม ทำการ develop ด้วย Eclipse 3.0 ครับ

#4 By somkiat (203.154.152.254) on 2004-12-16 19:41

ผมเปลี่ยนมาใช้ xmlspy ในการสร้าง xml file ครับ
ตอนนี้ใช้ภาษาไทยได้แล้ว

ขอบคุณพี่มากๆครับ

#5 By wiscuit (161.246.1.33) on 2004-12-17 03:38

ขอถามเกี่ยวกับการเขียน nsis script

#6 By บุรากรณ์ (203.151.140.119 /203.113.35.8) on 2005-04-27 23:11

#7 By (202.28.49.130) on 2005-09-10 10:43

#8 By (211.137.96.217) on 2006-01-06 16:54

ต้องการทราบว่า dom parser มีกี่ค่าย ค่ายอะไรบ้าง และจะ load ได้จากที่ไหน

#9 By (210.86.128.231 /127.0.0.1) on 2006-02-15 16:03

อยากรู้ว่า xml เขียนที่ notepad เหรอค่ะ แล้วเวลารัน รันยังไง และติดต่อกับ asp.net ยังไง
ขอบคุณค่ะพี่

#10 By aoy (58.10.33.154) on 2006-04-20 10:52

ใช้กับ php ได้รึเปล่าครับ

ใช้ยังไงครับ

#11 By Art (203.147.10.102) on 2006-06-14 15:52

ถ้าต้องการสร้างเอกสาร XML แล้วทำการติดต่อกันระหว่าง 2 เครื่อง แล้วดึงข้อมูลจากเครื่อง 1 มาที่เครื่อง 2 ต้องการอย่างไรบ้างคะ กรุณาตอบด้วยนะคะ
running46466@hotmail.com
ขอบคุณมากที่กรุณาตอบค่ะ

#12 By คนไม่เอาถ่าน (202.29.7.203) on 2006-09-05 16:26

#13 By (124.120.243.168) on 2006-09-21 21:20

#14 By (124.121.2.67) on 2007-05-25 16:03

จากที่ได้อ่านเรื่องนี้และได้ทดสอบแล้วมีประโยชน์มากครับ แต่เวลาต้องการเฟิ่มข้อมูลลงใน file xml จะต้องทำอย่างไรครับ

#15 By peakman (61.19.65.197 /61.19.65.197, 61.19.65.197) on 2007-05-27 22:04