แสดงบทความที่มีป้ายกำกับ XML แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ XML แสดงบทความทั้งหมด

วันอังคารที่ 21 ตุลาคม พ.ศ. 2551

การติดต่อ XML โดยใช้ XmlDocument

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

ตัวอย่าง code

วันอาทิตย์ที่ 19 ตุลาคม พ.ศ. 2551

การติดต่อไฟล์ xml ด้วย xmlTextReader

การติดต่อไฟล์ XML ด้วย XmlTextReader จะเป็นการติดต่อแบบ SAX (Simple API for XML) ซึ่งจะมีลักษณะการทำงานเป็นแบบ อ่านข้อมูลเข้ามาทีละชุด โดยข้อมูลที่เข้ามานั้นอาจจะเป็น element หรือ text หรือ attribute ก็ได้ ดังนั้นข้อดีของการติดต่อไฟล์ XML ด้วย SAX คือสามารถติดต่อไฟล์ XML ที่มีขนาดใหญ่มากๆ ได้ดีเนื่องจากจะเป็นการอ่านข้อมูลมาทีละชุดจึงทำให้ใช้เนื้อที่ในหน่วยความจำน้อย และสามารถทำงานได้รวดเร็วเนื่องจากทำการอ่านข้อมูลมา 1 ชุดแล้วก็ดำเนินการประมวลผลได้เลยไม่ต่อรอให้ระบบอ่านข้อมูลมาจนหมด ส่วนข้อเสียคือการเพิ่ม/ลดข้อมูล และ การท่องไปยังข้อมูลต่างๆ ในไฟล์ XML จะทำได้ยากเพราะการทำงานของ SAX นั้นจะเป็นการทำงานเรียงจาก element แรกเรื่อยไปจนกระทั่งถึง element สุดท้าย

ตัวอย่าง Code

วันศุกร์ที่ 3 ตุลาคม พ.ศ. 2551

เกร็ดเล็กๆ น้อยๆ ของ XML กับ DataSet ใน .Net

- การอ่าน XML เข้ามาใน DataSet
DataSet ds = new DataSet();
ds.ReadXml("XmlFile.xml");
- เวลาเขียนข้อมูลใน DataSet เป็นไฟล์ XML ใช้คำสั่ง
ds.WriteXML("XmlFile.xml");
- ภายหลังเรียกคำสั่ง ReadXml ถ้ามี table อยู่ก่อนหน้าใน dataset ข้อมูลเก่าจะหาย ดังนั้นหากต้องการอ่านข้อมูลเข้าข้อมูลหลายๆ ตาราง ให้สร้าง DataSet 2 ตัวโดยให้ตัวหนึ่งอ่าน แล้วค่อย copy() table ไปยัง DataSet อีกตัวหนึ่ง
- การใช้คำสั่ง clone() ของ DataTable จะเป็นเพียงการสร้าง Table ใหม่ซึ่งมีโครงสร้างทุกอย่างเหมือน Table ต้นฉบับแต่ไม่ได้คัดลอกข้อมูลภายในมาด้วย
- การใช้คำสั่ง copy () ของ DataTable นั้นคล้ายกับ clone() แต่จะต่างกันตรงที่คำสั่ง copy() จะคัดลอกข้อมูลนั้นมาด้วย
- ชนิดของข้อมูลของ column ที่อยู่ภายใน table ซึ่งได้จากการอ่าน ReadXML จะมีเฉพาะ string เท่านั้น
- ข้อมูลใน XML ที่เขียนลงไฟล์จะมีเพียง Table เดียวเท่านั้นคือ table แรกที่อยู่ใน DataSet (หรือมีค่า index เป็น 0)
- หากต้องการหาข้อมูลที่อยู่ใน DataSet ทำได้สองวิธีคือ 1. ใช้คำสั่ง find และ 2. ใช้คำสั่ง select โดยแต่ละวิธีจะมีรายละเอียดดังนี้
1. หากใช้คำสั่ง find จะต้องทำการกำหนด PrimaryKey ให้กับ Table ที่ต้องการค้นหาข้อมูลก่อน ซึ่งจะต้องกำหนด Keys โดย Keys ที่จะกำหนดนั้นต้องมี DataType เป็น DataColumn[] (Array ของ DataColumn) เมื่อเขียน Code จะมีลักษณะดังนี้
public string GetData(String itemID)
{
DataColumn[] keys = new DataColumn[1];
keys[0] = dataSet1.Tables["TableName"].Columns["ColumnName"];
dataSet1.Tables["TableName"].PrimaryKey = keys;
DataRow findRow = dataSet1.Tables["TableName"].Rows.Find(itemId);
if (findRow != null)
{
return findRow["ItemName"].ToString();
}
else
return "";
}
2. การใช้คำสั่ง select จะมีรูปแบบเหมือนกับการ filter ข้อมูล ผลลัพธ์ที่ได้จะอยู่ในรูป array ของ DataRow (DataRow[]) Code การทำงานมีดังนี้
public string GetData(String itemID)
{
DataRow[] findRow = dataSet1.Tables["TableName"].Select("ColumnName=" + itemID);
if(findRow.Length != 0)
{
return findRow[0]["ColumnName"].ToString();
}
else
{
return null;
}