วิเคราะห์ข้อมูลตาราง 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

  1. โหลดไฟล์ต้นฉบับด้วยตัวสร้าง HTMLDocument
  2. เลือกตารางที่ต้องการด้วย QuerySelector() ตัวเลือก ID หรือคลาสปลอดภัยกว่า table เมื่อเอกสารมีหลายตาราง
  3. ใช้ QuerySelectorAll() เพื่อรวบรวมแถว แล้วรวบรวมเซลล์ <th> และ <td> ในแต่ละแถว
  4. อ่านและปรับ TextContent ของแต่ละเซลล์ พร้อมรักษาลำดับแถวและคอลัมน์จากต้นฉบับ
  5. แปลงค่าที่รวบรวมเป็น 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