Xml.Document ใช้สำหรับแปลงเนื้อหา XML (text หรือ binary) เป็นโครงสร้างตารางลำดับชั้น ทำให้สามารถ query ข้อมูล XML ได้ง่ายเหมือน Power Query ตาราง
=Xml.Document(contents as any, optional encoding as nullable number) as table
=Xml.Document(contents as any, optional encoding as nullable number) as table
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| contents | any | Yes | เนื้อหา XML ที่ต้องการแปลง สามารถเป็น text string หรือ binary data | |
| encoding | nullable number | Optional | null | รหัสการเข้ารหัส (encoding) ที่ใช้ในการแปลง XML เช่น 1200 สำหรับ UTF-16, 65001 สำหรับ UTF-8 |
let XmlString = "Product A100Product B200", ParsedXml = Xml.Document(XmlString) in ParsedXmllet
XmlString = "<Root><Item><Name>Product A</Name><Price>100</Price></Item><Item><Name>Product B</Name><Price>200</Price></Item></Root>",
ParsedXml = Xml.Document(XmlString)
in
ParsedXml
ตารางแสดงโครงสร้าง Root element พร้อม child nodes
let XmlContent = File.Contents("data.xml"), ParsedXml = Xml.Document(XmlContent), Items = Table.SelectRows(ParsedXml, each [Name] = "Item") in Itemslet
XmlContent = File.Contents("data.xml"),
ParsedXml = Xml.Document(XmlContent),
Items = Table.SelectRows(ParsedXml, each [Name] = "Item")
in
Items
ตารางที่มีเฉพาะ Item elements
let XmlString = "Product A100", ParsedXml = Xml.Document(XmlString), Expanded = Table.ExpandRecordColumn(ParsedXml, "Item", {"Name", "Price"}, {"Name", "Price"}…let
XmlString = "<Root><Item><Name>Product A</Name><Price>100</Price></Item></Root>",
ParsedXml = Xml.Document(XmlString),
Expanded = Table.ExpandRecordColumn(ParsedXml, "Item", {"Name", "Price"}, {"Name", "Price"})
in
Expanded
ตารางที่มีคอลัมน์ Name และ Price แยกออกมา
let BinaryXml = File.Contents("data-utf16.xml"), ParsedXml = Xml.Document(BinaryXml, 1200) in ParsedXmllet
BinaryXml = File.Contents("data-utf16.xml"),
ParsedXml = Xml.Document(BinaryXml, 1200)
in
ParsedXml
ตารางแสดงโครงสร้าง XML ที่อ่านได้ถูกต้อง
ผลลัพธ์คือ table ที่แสดงโครงสร้างลำดับชั้นของ XML บางครั้ง elements ถูกแสดงเป็น record ที่ nested กัน คุณอาจต้องใช้ Table.ExpandRecordColumn เพื่อเปิดตัวข้อมูลออกมา
ใช้พารามิเตอร์ที่สองคือ encoding number เช่น 65001 (UTF-8), 1200 (UTF-16), 1252 (Windows-1252) เป็นต้น
Xml.Document จัดการไฟล์ XML ส่วน Json.Document จัดการไฟล์ JSON ทั้งสองใช้โครงสร้างลำดับชั้นแต่รูปแบบไฟล์ต่างกัน
Power Query จะ throw error หากรูปแบบ XML ไม่ถูกต้องหรือ encoding ผิด อย่าลืมตรวจสอบ XML validity และ encoding ของไฟล์
Xml.Document แปลง XML content เป็นโครงสร้างตารางที่ลำดับชั้น ซึ่งแสดงความสัมพันธ์ของ elements, attributes, และ values ในไฟล์ XML
ที่เจ๋งคือ มันยอมรับทั้ง text string และ binary data ได้ คุณสามารถ load XML จาก API, file, หรือ text โดยตรง แล้วก็ transform ไปเป็นรูปแบบที่ใช้งานได้สะดวก
ส่วนตัวผมใช้ Xml.Document มักจะต่อกับ Table.ExpandRecordColumn() เพื่อปล่อย nested elements ออกมา และ Table.SelectRows() เพื่อกรอง element ที่ต้องการ นี่คือ workflow ที่ทำให้ XML import ไม่ปวดหัวเลย 😎