วันอังคารที่ 25 มิถุนายน พ.ศ. 2562

NodeJS and XML

XML ??


      Extensible Markup Language หรือ XML คืออะไร ? ภาษาของ computer ที่ใช้งานสำหรับการกำหนดรูปแบบการเข้ารหัสของข้อมูลใน format ของทั้งที่มนุษย์อ่านและ computer อ่านได้ โดยมี specification คือ W3C XML 1.0
      ถ้าเปรียบเทียบกับภาษา HTML จะแตกต่างกันที่ HTML ถูกออกแบบมาเพื่อการแสดงผลอย่างเดียวเท่านั้น เช่นให้แสดงผลตัวเล็ก ตัวใหญ่ เหมือนที่เคยเห็นในเวบเพจทั้วไป แต่ภาษา XML นั้นถูกออกแบบมาเพื่อเก็บข้อมูล โดยทั้งข้อมูลและโครงสร้างของข้อมูลนั้นๆไว้ด้วยกัน 


ตัวอย่างของ XML 



ภาพที่ 1.1 ไฟล์ .XML

โครงสร้างของ XML



  • Tag สำหรับใน XML แล้วแท็กมีความหมายในลักษณะเดียวกับที่ใช้ใน HTML tag คือข้อความที่อยู่ระหว่างสัญลักษณ์ "<" และ ">" มี 2 แบบคือ 

- แท็กเปิด (Start tag) เช่น 
- แท็กปิด (End Tag) เช่น สังเกตุได้ว่าแท็กปิดเครื่องหมาย / อยู่หลังสัญลักษณ์ "<" 

  • Element คือโครงสร้างหลักของ XML ซึ่งอยู่ในรูปของแท็กจะมีลักษณะซ้อนกันเป็นชั้นๆโดย element เริ่มต้นที่แท็กเปิดและสิ้นสุดที่แท็กปิดในแท็กดียวกัน และ Root element จะเป็น element บนสุดของไฟล์ XML  จากตัวอย่าง Element คือ <name>Jane Doe</name> 


  • Attribute คือข้อมูลความหมายเพิ่มเติมเป็นค่าคงที่ ถูกเขียนอยู่ภายใน tag เปิด <....> จะมีมากกว่า 1 , มี 1 อันหรือไม่มีเลยก็ได้ จากตัวอย่างที่ 1 ก็คือ Gender="M"> เป็นต้น

  • XML declaration จะเริ่มต้นด้วย XML declaration เพื่อบอกข้อมูลของตัวมันเองเช่น <?xml version="1.0" encoding="UTF-8"?>



NodeJS Read Fle .xml


โดยเราสามารถนำ NodeJS มาอ่านไฟล์ .xml ได้เลย แต่! มันจะอ่านเป็น <tag> ต่างๆ แบบนี้

Code NodeJS
var fs = require("fs");
fs.readFile("data.xml", "utf-8", function(data, err) {
  if (err) console.log(err);
  console.log(data);
});

ภาพที่ 1.2 ผลทดสอบการนำ NodeJS มาอ่านไฟล์ .XML

ภาพที่ 1.3 ไฟล์ .XML

     จากภาพจะเห็นได้ว่าผลลัพธ์นั้นดูหรือ อ่านได้ยากนิดนึง เจ้า NodeJS จึงมี Packet เสริมที่เรียกว่า "xml2json" ที่สามารถแปลง .xml ที่อ่านได้ให้มาอยู่ในรูปแบ JSON 

1. ติดตั้ง NodeJS และสร้าง Project ขึ้นมา 

2. ติดตั้ง Packet xml2json
npm install xml2json
3. เขียน Code ลงในไฟล์ index.js ตามนี้ 
var fs = require("fs"),
  parseString = require("xml2js").parseString;
fs.readFile("data.xml", "utf-8", function(err, data) {
  if (err) console.log(err);
  // we log out the readFile results
  console.log(data);
  // we then pass the data to our method here
  parseString(data, function(err, result) {
    if (err) console.log(err);
    // here we log the results of our xml string conversion
    console.log(result.bookstore.book[0]);
  });
});

แล้วรัน NodeJS จะพบว่าเมื่อแปลงจาก XML เป็น JSON จะทำให้อ่านข้อมูลได้ง่ายกว่า



ภาพที่ 1.4 ผลทดสอบการนำ NodeJS มาอ่านไฟล์ .XML


NodeJS Write Fle .xml


1. สร้างไฟล์ใหม่ เขียน Code ลงในไฟล์ ตามนี้ (ในที่นี้สร้างไฟล์ชื่อว่า edit.js)
var fs = require("fs"),
  parseString = require("xml2js").parseString,
  xml2js = require("xml2js");
fs.readFile("data.xml", "utf-8", function(err, data) {
  if (err) console.log(err);
  // we log out the readFile results
  console.log(data);
  // we then pass the data to our method here
  parseString(data, function(err, result) {
    if (err) console.log(err);
    // here we log the results of our xml string conversion
    console.log(result);
    var json = result;
    json.bookstore.book[0].title = "The Python Programming Language";
    // create a new builder object and then convert
    // our json back to xml.
    var builder = new xml2js.Builder();
    var xml = builder.buildObject(json);
    fs.writeFile("data.xml", xml, function(err, data) {
      if (err) console.log(err);
      console.log("successfully written our update xml to file");
    });
  });
});
แล้วรัน NodeJS จะพบว่าเราสามารถแก้ไขข้อมูลในไฟล์ XML หรือ สร้างไฟล์ใหม่ได้ 


ภาพที่ 1.5 ผลทดสอบการก่อนนำ NodeJS มาแก้ไขไฟล์ .XML

ภาพที่ 1.6 ผลทดสอบการหลังนำ NodeJS มาแก้ไขไฟล์ .XML



Code Client Smart Contract auto transfer

ในครั้งนี้เราจะมาทำให้ Smart Contract ของเรา transfer auto กันครับ โดยเริ่มจากส่วนของ Smart contract ของเราก่อน เราได้เพิ่มฟังก์ชั่น ...