วันศุกร์ที่ ๓๑ สิงหาคม พ.ศ. ๒๕๕๐

การออกแบบ xml เพื่อใช้กับ DataSet อ็อบเจ็ค (XML structure for DataSet)

มีคนถามมาว่าทำไมมีแต่บทความพื้นๆ จัง คือ ที่จริงผมตั้งใจจะเรียงลำดับตามหนังสือที่ผมอ่านครับ แต่เมื่อมีคนถามเข้า และประจวบกับผมจะเอาความรู้บางอย่างที่ใช้ในการทำงาน มาเก็บเอาไว้ เพราะผมลืมสิ่งที่ทำไปแล้วง่ายมากๆ วันนี้มีโอกาสได้ใช้เกี่ยวกับไฟล์ XML ซึ่งใช้ในการเก็บข้อมูลบางอย่าง แล้วต้องมีการนำข้อมูลในไฟล์ขึ้นมาใช้

โดยทั่วไป ถ้าเรานึกถึงไฟล์ เราก็ต้องนึกถึง เนมสเปส (Namespace) ที่ชื่อ IO ดังนั้นในการไปติดต่อกับไฟล์ XML จึงต้องใช้อ็อบเจ็คของคลาสใน IO ไปติดต่อ แต่ผมต้องการเขียนโค้ดสั้นๆ และง่ายๆ จึงใช้ DataSet ตัวเดียว แทนการใช้ Syste.IO มาใช้ในการดึงข้อมูลจากไฟล์ XML และทั้งเก็บข้อมูลไว้ในตัวมัน ซึ่งสะดวกจริงๆ ครับ ไม่ต้องมานั่งหา node เพื่อดึงข้อมูล

ก่อนอื่นเราต้องสร้างไฟล์ XML ของเราขึ้นมาก่อนครับ ผมขอยกตัวอย่างและอธิบายเลยนะครับ
โครงสร้าง XML ต่อไปนี้ คือตัวอย่างของการสร้าง dataset ที่มี 1 ตาราง 1 คอลัมน์ และ 1 แถว

<?xml version="1.0" encoding="utf-8" ?>
<datasetName>
<tableName>
<columnName>data on row</columnName>
</tableName>
</datasetName>

ถ้าต้องการหลายๆ แถว โครงสร้าง XML จะต้องเพิ่มตั้งส่วนที่เป็นชื่อตารางเข้าไป

<?xml version="1.0" encoding="utf-8" ?>
<datasetName>
<tableName>
<columnName>data on row1</columnName>
</tableName>
<tableName>
<columnName>data on row2</columnName>
</tableName>
<tableName>
<columnName>data on row3</columnName>
</tableName>
</datasetName>


ส่วนการเพิ่มคอลัมน์ก็ต้องเพิ่มชื่อคอลัมน์ไปทุกๆ แถวๆเลยนะครับ

<?xml version="1.0" encoding="utf-8" ?>
<datasetName>
<tableName>
<columnName1>data on row1</columnName1>
<columnName2>data on row1</columnName2>
</tableName>
<tableName>
<columnName1>data on row2</columnName1>
<columnName2>data on row1</columnName2>
</tableName>
<tableName>
<columnName1>data on row3</columnName1>
<columnName2>data on row1</columnName2>
</tableName>
</datasetName>


และสุดท้ายก็เป็นที่รู้กันครับว่า ใน dataset สามารถเก็บตารางได้หลายตาราง ดังนั้นต้องแสดงกรณีต้องการหลายๆ ตารางครับ โครง XML เป็นดังนี้

<?xml version="1.0" encoding="utf-8" ?>
<datasetName>
<!-- Table 1 -->
<tableName1>
<columnName1>data on row1</columnName1>
<columnName2>data on row1</columnName2>
</tableName1>
<tableName1>
<columnName1>data on row2</columnName1>
<columnName2>data on row2</columnName2>
</tableName1>
<tableName1>
<columnName1>data on row3</columnName1>
<columnName2>data on row3</columnName2>
</tableName1>
<!-- Table 2 -->
<tableName2>
<columnName1>data on row1</columnName1>
<columnName2>data on row1</columnName2>
<columnName3>data on row1</columnName3>
</tableName2>
<tableName2>
<columnName1>data on row2</columnName1>
<columnName2>data on row2</columnName2>
<columnName3>data on row2</columnName3>
</tableName2>
</datasetName>


และสุดท้ายก็คือ การดึงข้อมูลจาก XML ไฟล์ ด้วย DataSet ซึ่งก็ง่ายนิดเดียวครับ แค่บรรทัดเดียว (สร้าง object ds ไว้ก่อนด้วยนะครับ เดี๋ยว error)

'สำหรับ VB.NET
ds.ReadXml("c:\example.xml")

//สำหรับ C#
ds.ReadXml(@"c:\example.xml");

ถ้าแก้ไขข้อมูลแล้วจะเก็บลงคืน XML ไฟล์ ก็บรรทัดเดียวอีกเหมือนกันครับ

'สำหรับ VB.NET
ds.WriteXml("c:\example.xml")

//สำหรับ C#
ds.WriteXml(@"c:\example.xml");


ลองนำไปประยุกต์ใช้ดูครับ และอย่าลืมว่า syntax ของ XML เป็นแบบ case sensitive นะครับ

Related Post