Cách lấy phần tử dom trong php?

Lớp domdocument của Php là một lớp rất tiện dụng có thể được sử dụng cho một số tác vụ như phân tích cú pháp xml, html và tạo xml. Nó được ghi lại ở đây

Trong hướng dẫn này, chúng ta sẽ xem cách sử dụng lớp này để phân tích nội dung html. Nhu cầu phân tích cú pháp html xảy ra khi bạn đang viết ví dụ về trình dọn dẹp hoặc các tập lệnh trích xuất dữ liệu tương tự

Html mẫu

Sau đây là tệp html mẫu mà chúng tôi sẽ sử dụng với DomDocument

<html>
	<body>
		<div id="mango">
			This is the mango div. It has some text and a form too.
			<form>
				<input type="text" name="first_name" value="Yahoo" />
				<input type="text" name="last_name" value="Bingo" />
			</form>
			
			<table class="inner">
				<tr><td>Happy</td><td>Sky</td></tr>
			</table>
		</div>
		
		<table id="data" class="outer">
			<tr><td>Happy</td><td>Sky</td></tr>
			<tr><td>Happy</td><td>Sky</td></tr>
			<tr><td>Happy</td><td>Sky</td></tr>
			<tr><td>Happy</td><td>Sky</td></tr>
			<tr><td>Happy</td><td>Sky</td></tr>
		</table>
	</body>
</html>

1. Đang tải html

Vì vậy, điều đầu tiên cần làm là xây dựng một đối tượng domdocument và tải nội dung html trong đó. Hãy xem làm thế nào để làm điều đó

// a new dom object
$dom = new domDocument; 

// load the html into the object
$dom->loadHTML($html); 

// discard white space
$dom->preserveWhiteSpace = false;

Xong. Đối tượng $dom đã tải nội dung html và có thể được sử dụng để trích xuất nội dung từ toàn bộ cấu trúc html giống như được thực hiện bên trong javascript. Các chức năng phổ biến nhất là getElementsByTagName và getElementById

Bây giờ html đã được tải, đã đến lúc xem các nút và phần tử con có thể được truy cập như thế nào

2. Nhận một phần tử theo id html của nó

Điều này sẽ nắm giữ một nút/phần tử bằng cách sử dụng ID của nó

//get element by id
$mango_div = $dom->getElementById('mango');

if(!mango_div)
{
	die("Element not found");
}

echo "element found";

Lấy giá trị/html của một nút

Thuộc tính "nodeValue" của một nút sẽ cung cấp giá trị của nó nhưng loại bỏ tất cả html bên trong nó. Ví dụ

echo $mango_div->nodeValue;

Phương pháp thứ hai là sử dụng hàm saveHTML, hàm này lấy ra chính xác html bên trong nút cụ thể đó

echo $dom->saveHTML($mango_div);

Lưu ý rằng hàm saveHTML được gọi trên đối tượng dom và đối tượng nút được truyền dưới dạng tham số. Hàm saveHTML sẽ cung cấp toàn bộ html (html bên ngoài) của nút bao gồm cả các thẻ html của chính nút đó

Một chức năng khác gọi là C14N thực hiện điều tương tự nhanh hơn

//echo the contents of mango_div element
echo $mango_div->C14N();

html bên trong

Để chỉ lấy html bên trong, hãy thực hiện theo cách tiếp cận sau. Nó thêm html của tất cả các nút con

$tables = $dom->getElementsByTagName('table');

echo get_inner_html($tables->item(0));

function get_inner_html( $node ) 
{
	$innerHTML= '';
	$children = $node->childNodes;
	
	foreach ($children as $child)
	{
		$innerHTML .= $child->ownerDocument->saveXML( $child );
	}
	
	return $innerHTML;
}

Hàm get_inner_html lấy html bên trong của phần tử html. Lưu ý rằng chúng tôi đã sử dụng hàm saveXML thay vì hàm saveHTML. Thuộc tính "childNodes" cung cấp các nút con của một phần tử. Đây là những đứa trẻ trực tiếp

3. Lấy các phần tử theo tên thẻ

Điều này sẽ nhận được các yếu tố theo tên thẻ

$tables = $dom->getElementsByTagName('table');

foreach($tables as $table)
{
	echo $dom->saveHTML($table);
}

Hàm getElementsByTagName trả về một đối tượng kiểu DomNodeList có thể được đọc dưới dạng một mảng các đối tượng kiểu DomNode. Một cách khác để tìm nạp các nút của NodeList là sử dụng hàm item

________số 8_______

Hàm mục lấy chỉ mục của mục được tìm nạp. Thuộc tính độ dài của DomNodeList đưa ra số lượng đối tượng được tìm thấy

4. Lấy các thuộc tính của một phần tử

Mỗi DomNode có một thuộc tính gọi là "thuộc tính" là tập hợp tất cả các thuộc tính html của nút đó
Đây là một ví dụ nhanh

$tables = $dom->getElementsByTagName('table');

$i = 0;

while($table = $tables->item($i++))
{
	foreach($table->attributes as $attr)
	{
		echo $attr->name . " " . $attr->value . "<br />";
	}
}

Để lấy một thuộc tính cụ thể bằng tên của nó, hãy sử dụng hàm "getNamedItem" trên đối tượng thuộc tính

// a new dom object
$dom = new domDocument; 

// load the html into the object
$dom->loadHTML($html); 

// discard white space
$dom->preserveWhiteSpace = false;
0

5. Con của một nút

Một DomNode có các thuộc tính sau cung cấp quyền truy cập cho các phần tử con của nó

1. nút con
2. đứa trẻ đầu tiên
3. con cuối cùng

// a new dom object
$dom = new domDocument; 

// load the html into the object
$dom->loadHTML($html); 

// discard white space
$dom->preserveWhiteSpace = false;
1

Kiểm tra xem các nút con có tồn tại không

Hàm hasChildNodes có thể được sử dụng để kiểm tra xem một nút có nút con nào không
ví dụ nhanh

// a new dom object
$dom = new domDocument; 

// load the html into the object
$dom->loadHTML($html); 

// discard white space
$dom->preserveWhiteSpace = false;
2

6. So sánh 2 phần tử cho bằng nhau

Có thể cần kiểm tra xem phần tử trong 1 biến có giống với phần tử trong biến khác không. Chức năng "isSameNode" được sử dụng cho việc này. Hàm được gọi trên một nút và nút kia được truyền dưới dạng tham số. Nếu các nút giống nhau, thì boolean true được trả về

// a new dom object
$dom = new domDocument; 

// load the html into the object
$dom->loadHTML($html); 

// discard white space
$dom->preserveWhiteSpace = false;
3

Var_dump sẽ hiển thị true , cho biết rằng các bảng trong cả $table và $table2 đều giống nhau

Phần kết luận

Các ví dụ trên cho thấy cách Domdocument có thể được sử dụng để truy cập các phần tử trong tài liệu html theo cách hướng đối tượng. Domdocument không chỉ có thể phân tích cú pháp html mà còn có thể tạo/sửa đổi html và xml. Trong các bài viết sau chúng ta sẽ xem làm thế nào để làm điều đó

Làm cách nào để lấy phần tử HTML bằng PHP?

Sử dụng PHP DOMDocument Class, gọi đối tượng DOMDocument. Gọi hàm loadHTML() được xác định trước với các tham số biến. Sử dụng hàm DOM getElementById(), chúng tôi nhận được giá trị phần tử HTML

Chúng ta có thể sử dụng DOM trong PHP không?

Vì vậy, nếu bạn đã từng làm việc với nội dung của một bài đăng (loại bài đăng hoặc loại bài đăng tùy chỉnh, đối với vấn đề đó) và bạn cần thao tác với các thẻ giống như cách bạn làm với JavaScript, thì hãy using the DomDocument library is one of the most powerful tools are your disposal.

DOMDocument() trong PHP là gì?

Tài liệu DOM. Hàm getElementsByTagName() là hàm sẵn có trong PHP được sử dụng để trả về một thể hiện mới của lớp DOMNodeList chứa tất cả các thành phần của tên thẻ cục bộ .

Làm cách nào để có được InternalHTML trong PHP?

hàm php DOMinnerHTML(DOMNode $element) { $innerHTML = ""; . = $element->ownerDocument->saveHTML($child);