วิธีทำงานกับ DOM ใน Python

วิธีทำงานกับ DOM ใน Python

Aspose.HTML FOSS สำหรับโมเดล Python HTML ในฐานะ DOM ที่อิงมาตรฐาน: Document สร้างโหนด, Element จัดการแอตทริบิวต์, และ Node ให้การดำเนินการต้นไม้. คู่มือนี้สร้างต้นไม้ขนาดเล็กและอ่านโครงสร้างกลับมา, โดยใช้ pip เพื่อติดตั้ง.

คู่มือขั้นตอนต่อขั้นตอน

ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ

ติดตั้งแพ็กเกจ:

git clone https://github.com/aspose-html-foss/Aspose.HTML-FOSS-for-Python.git
cd Aspose.HTML-FOSS-for-Python
pip install -e .

จากนั้นยืนยันเมตาดาทาของแพ็กเกจ:

pip show aspose-html-foss

ขั้นตอนที่ 2: นำเข้าคลาสที่จำเป็น

from aspose_html.dom import Document

ขั้นตอนที่ 3: สร้างเอกสารและองค์ประกอบ

Document คือโรงงานโหนด; create_element() คืนค่าองค์ประกอบใหม่ที่คุณแนบด้วย append_child():

doc = Document()
el = doc.create_element("div")
doc.append_child(el)

ขั้นตอนที่ 4: ตั้งค่าแอตทริบิวต์

set_attribute() เขียนแอตทริบิวต์มาร์คอัป; คลาสและไอดีเป็นตัวขับเคลื่อนการจับคู่ CSS ในภายหลัง:

el.set_attribute("class", "foo")
el.set_attribute("id", "bar")

ขั้นตอนที่ 5: อ่านโครงสร้างกลับ

get_element_by_id() ดึงเอาองค์ประกอบ, get_attribute() คืนค่าแอตทริบิวต์ของมัน, และ has_child_nodes() ยืนยันโครงสร้าง:

found = doc.get_element_by_id("bar")
print(found.get_attribute("class"))
print(doc.has_child_nodes())

ปัญหาทั่วไปและการแก้ไข

การค้นหาด้วย id ไม่ได้คืนค่าอะไรเลย. ขององค์ประกอบ id ต้องตั้งค่า attribute ก่อน get_element_by_id() ถูกเรียกใช้ และองค์ประกอบต้องถูกแนบเข้ากับต้นไม้ของเอกสาร.

การอ่าน attribute คืนค่าที่ไม่คาดคิด. get_attribute() คืนค่าที่ตั้งไว้ล่าสุดโดย set_attribute(); ตรวจสอบการพิมพ์ผิดในชื่อ attribute — พวกมันเป็นสตริงธรรมดา.

โหนดที่สร้างจากเอกสารอื่นทำงานผิดปกติ. Nodes เป็นแบบจำกัดในเอกสาร. สร้างพวกมันผ่านวิธีเดียวกัน Document, หรือโอนย้ายพวกมันด้วย import_node()/adopt_node().

คำถามที่พบบ่อย

Document สามารถสร้างประเภทโหนดอะไรได้บ้าง?

องค์ประกอบ, โหนดข้อความ, คอมเมนต์, และส่วนย่อยของเอกสาร — ผ่าน create_element(), create_text_node(), create_comment(), และ create_document_fragment().

ฉันจะย้ายหรือเอาโหนดที่มีอยู่ออกได้อย่างไร?

ใช้การดำเนินการ Node: insert_before(), remove_child(), replace_child() และ clone_node().

ฉันสามารถแยกวิเคราะห์มาร์กอัปที่มีอยู่แทนการสร้างต้นไม้ด้วยตนเองได้หรือไม่?

ใช่ — HTMLDocument.parse() สำหรับหน้าและ HTMLDocument.parse_fragment() สำหรับส่วนย่อยให้ผลลัพธ์เป็นต้นไม้ประเภทเดียวกัน.

ดูเพิ่มเติม

 ภาษาไทย