วิเคราะห์ข้อมูลตาราง HTML ด้วย .NET API
Aspose.HTML for .NET
โหลดไฟล์ HTML ลงใน
HTMLDocument
เพื่อให้แอปพลิเคชัน C# ค้นหา DOM และแยกเนื้อหาตารางที่มีโครงสร้างได้ เลือก <table> ที่ต้องการ วนซ้ำแถว อ่านทั้งเซลล์ <th> และ <td> แล้วส่งค่าที่รวบรวมไปยัง JSON, CSV, ฐานข้อมูล หรือเวิร์กโฟลว์อื่น
แยกตาราง HTML เป็น JSON ใน C#
ตัวอย่างต่อไปนี้เลือกตารางแรกใน input.html รักษาลำดับเซลล์หัวตารางและเซลล์ข้อมูล และเขียนค่าที่แยกได้ลงใน table-data.json ใช้ตัวเลือกที่เฉพาะเจาะจงมากขึ้นเมื่อเอกสารมีหลายตาราง
โค้ด C# สำหรับแยกข้อมูลตาราง HTML
using Aspose.Html;
using Aspose.Html.Dom;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;
string inputPath = "input.html";
string outputPath = "table-data.json";
using HTMLDocument document = new HTMLDocument(inputPath);
// Select the table to extract
Element table = document.QuerySelector("table");
if (table == null)
{
throw new InvalidOperationException("The HTML document does not contain a table.");
}
List<List<string>> tableData = new List<List<string>>();
// Read header and data cells in document order
foreach (Element row in table.QuerySelectorAll("tr"))
{
List<string> values = new List<string>();
foreach (Element cell in row.QuerySelectorAll("th, td"))
{
values.Add(cell.TextContent.Trim());
}
if (values.Count > 0)
{
tableData.Add(values);
}
}
JsonSerializerOptions options = new JsonSerializerOptions
{
WriteIndented = true
};
string json = JsonSerializer.Serialize(tableData, options);
File.WriteAllText(outputPath, json);
ขั้นตอนการแยกข้อมูลจากตาราง HTML
- โหลดไฟล์ต้นฉบับด้วยตัวสร้าง
HTMLDocument - เลือกตารางที่ต้องการด้วย
QuerySelector()ตัวเลือก ID หรือคลาสปลอดภัยกว่าtableเมื่อเอกสารมีหลายตาราง - ใช้
QuerySelectorAll()เพื่อรวบรวมแถว แล้วรวบรวมเซลล์<th>และ<td>ในแต่ละแถว - อ่านและปรับ
TextContentของแต่ละเซลล์ พร้อมรักษาลำดับแถวและคอลัมน์จากต้นฉบับ - แปลงค่าที่รวบรวมเป็น JSON ด้วย
JsonSerializerและบันทึกไฟล์ JSON
ตัวเลือกและข้อจำกัดในการแยกข้อมูลตาราง HTML
- เลือกตารางที่ถูกต้อง ใช้
#id,.class,main tableหรือตัวเลือก CSS ที่คงที่ แทนการสมมติว่าตารางแรกคือตารางที่ต้องการ ดูรูปแบบเพิ่มเติมที่ ตัวเลือก CSS และ คิวรี XPath - ประมวลผลหนึ่งหรือหลายตาราง เปลี่ยน
QuerySelector()เป็นQuerySelectorAll("table")เมื่อแอปพลิเคชันต้องแยกทุกตารางในเอกสาร - ควบคุมขอบเขตของแถว ตัวเลือก
trอ่านแถวจาก<thead>,<tbody>และ<tfoot>จำกัดตัวเลือกเมื่อผลลัพธ์ไม่ควรรวมส่วนท้ายหรือต้องประมวลผลแต่ละส่วนแยกกัน - พิจารณาตารางซ้อน ตัวเลือกแบบ descendant อาจเข้าถึงแถวในตารางซ้อน ใช้ตัวเลือกที่ผูกกับโครงสร้างที่ต้องการเมื่อควรแยกตารางซ้อนเป็นชุดข้อมูลต่างหาก
- เลือกรูปแบบปลายทาง DOM API ให้ค่าที่แยกได้ จากนั้นใช้ serializer และ file API มาตรฐานของ .NET เพื่อเขียน JSON, CSV, ข้อความ หรือเรคคอร์ดเฉพาะของแอปพลิเคชัน
เอกสารประกอบการแยกข้อมูลตาราง HTML
ดู แยกตาราง HTML ใน C# สำหรับตัวอย่างการอ่านไฟล์ภายในเครื่องและ URL การรักษาเซลล์หัวตาราง การแยกลิงก์ และการเขียนค่าเป็น CSV หรือข้อความ ส่วน การแยกข้อมูล ยังครอบคลุมการนำทาง DOM ตัวเลือก CSS, XPath และการแยกเนื้อหาเว็บประเภทอื่น
ติดตั้ง Aspose.HTML for .NET
ติดตั้ง Aspose.HTML for .NET จาก NuGet ด้วย .NET CLI:
dotnet add package Aspose.HTML
คุณยังสามารถใช้หน้าต่าง NuGet Package Manager หรือเรียกใช้ Install-Package Aspose.HTML ใน Package Manager Console ได้ ดูรายละเอียดการตั้งค่าใน
คู่มือการติดตั้ง
หรือขอ
ใบอนุญาตชั่วคราว
เพื่อประเมิน API โดยไม่มีข้อจำกัดของเวอร์ชันทดลอง
คำถามที่พบบ่อยเกี่ยวกับการแยกข้อมูลตาราง HTML
1. จะรวมส่วนหัวของตารางไว้ในข้อมูลที่แยกได้อย่างไร?
อ่านทั้งองค์ประกอบ <th> และ <td> ของแต่ละแถว ตัวอย่างใช้ตัวเลือก th, td ดังนั้นค่าหัวตารางจึงคงอยู่ในตำแหน่งเดิมในผลลัพธ์ JSON
2. เซลล์ตารางที่ว่างจะยังคงอยู่ในผลลัพธ์ JSON หรือไม่?
อยู่ แต่ละ <th> หรือ <td> ที่เลือกจะให้ค่าสตริงหนึ่งค่า และเซลล์ว่างจะกลายเป็นสตริงว่างหลัง TextContent.Trim() ทำให้ตำแหน่งเซลล์ในแถวยังคงเดิม
3. ฉันสามารถบันทึกข้อมูลตารางที่แยกได้เป็น CSV หรือ Excel ได้หรือไม่?
เวิร์กโฟลว์ DOM คืนค่าของเซลล์โดยไม่บังคับรูปแบบผลลัพธ์ เขียนเป็น CSV ด้วย file API มาตรฐานของ .NET แปลงเป็น JSON หรือส่งไปยังคอมโพเนนต์สเปรดชีตของแอปพลิเคชันเมื่อต้องการเวิร์กบุ๊ก Excel
4. โค้ดแยกข้อมูลจะขยาย rowspan และ colspan โดยอัตโนมัติหรือไม่?
ไม่ แอตทริบิวต์ยังคงอยู่บนเซลล์ แต่รายการแบบแบนไม่แสดงตำแหน่งกริดที่ถูกครอบครอง เพิ่มตรรกะการปรับข้อมูลเมื่อผลลัพธ์ต้องขยายเซลล์ที่ครอบคลุมหลายช่องให้เป็นชุดข้อมูลรูปสี่เหลี่ยม
5. ฉันสามารถแยกลิงก์หรือมาร์กอัป HTML จากเซลล์แทนข้อความธรรมดาได้หรือไม่?
ได้ TextContent คืนเฉพาะข้อความของเซลล์ ใช้ InnerHTML เพื่อรักษามาร์กอัปซ้อน หรือเลือกองค์ประกอบ <a> ในแต่ละเซลล์แล้วอ่านทั้งข้อความและแอตทริบิวต์ href เมื่อต้องการปลายทางของลิงก์
เวิร์กโฟลว์ตาราง HTML ที่เกี่ยวข้อง
สร้างหรือแก้ไขตาราง และแยกตารางพร้อมมาร์กอัปด้วยคู่มือ Aspose.HTML for .NET