Kotchasan Framework Documentation
DOMNode
DOMNode
\Kotchasan\DOMNode แทน node ใน DOM structure
การสร้าง
DOMNode ถูกสร้างโดย DOMParser โดยปกติไม่ต้องสร้างเอง
use Kotchasan\DOMNode;
// สร้าง node ใหม่
$node = new DOMNode(
'DIV', // nodeName
null, // parentNode
['class' => 'container'], // attributes
null // nodeValue (สำหรับ text node)
);
// Text node
$textNode = new DOMNode('', $parentNode, [], 'Hello World');Constructor
$node = new DOMNode($nodeName, $parentNode, $attributes, $nodeValue = null);| Parameter | Type | Description |
|---|---|---|
$nodeName |
string | ชื่อ tag (เช่น DIV, P) ว่างสำหรับ text node |
$parentNode |
DOMNode/null | Parent node |
$attributes |
array | HTML attributes |
$nodeValue |
string/null | ค่าสำหรับ text node |
Properties
nodeName
ชื่อของ tag (uppercase)
echo $node->nodeName; // "DIV", "P", "SPAN"
// Text node จะมี nodeName เป็นค่าว่าง
if ($node->nodeName === '') {
echo "This is a text node";
}nodeValue
ค่าของ text node
// สำหรับ text node
echo $node->nodeValue; // "Hello World"
// สำหรับ element node จะเป็น nullattributes
Array ของ HTML attributes (keys เป็น uppercase)
$node->attributes['CLASS']; // "container"
$node->attributes['ID']; // "main"
$node->attributes['HREF']; // "https://..."parentNode
Reference ไปยัง parent node
if ($node->parentNode !== null) {
echo "Parent: " . $node->parentNode->nodeName;
}childNodes
Array ของ child nodes
foreach ($node->childNodes as $child) {
echo $child->nodeName . "\n";
}previousSibling / nextSibling
Sibling nodes
// Previous sibling
if ($node->previousSibling) {
echo "Previous: " . $node->previousSibling->nodeName;
}
// Next sibling
if ($node->nextSibling) {
echo "Next: " . $node->nextSibling->nodeName;
}Methods
hasChildNodes()
ตรวจสอบว่ามี child nodes หรือไม่
if ($node->hasChildNodes()) {
echo "มี " . count($node->childNodes) . " children";
}hasClass()
ตรวจสอบว่ามี CSS class หรือไม่
if ($node->hasClass('active')) {
echo "Node มี class 'active'";
}
if ($node->hasClass('container')) {
// ...
}isInlineElement()
ตรวจสอบว่าเป็น inline element หรือไม่
if ($node->isInlineElement()) {
echo "Inline element";
} else {
echo "Block element";
}Inline elements:B, BIG, I, SMALL, TT, ABBR, ACRONYM, CITE, CODE, DFN, EM, STRONG, SAMP, TIME, VAR, A, BDO, BR, IMG, MAP, OBJECT, Q, SCRIPT, SPAN, SUB, BUTTON, INPUT, LABEL, SELECT, TEXTAREA
nodeText()
ดึง text content ของ node และ descendants ทั้งหมด
$html = '<div><p>Hello</p><p>World</p></div>';
$parser = new DOMParser($html);
$div = $parser->nodes()[0];
echo $div->nodeText(); // "HelloWorld"unentities()
แปลง HTML entities เป็น characters
$text = $node->unentities('Hello World&More');
// "Hello World&More"Supported entities:
→&→&<→<>→>'→'"→"
ตัวอย่างการใช้งาน
Traverse DOM Tree
function traverse($node, $callback, $depth = 0) {
$callback($node, $depth);
foreach ($node->childNodes as $child) {
traverse($child, $callback, $depth + 1);
}
}
$parser = new DOMParser('<div><p>Hello</p></div>');
foreach ($parser->nodes() as $node) {
traverse($node, function($n, $d) {
$indent = str_repeat(' ', $d);
echo $indent . ($n->nodeName ?: 'TEXT') . "\n";
});
}Find Elements by Class
function findByClass($node, $className, &$results = []) {
if ($node->hasClass($className)) {
$results[] = $node;
}
foreach ($node->childNodes as $child) {
findByClass($child, $className, $results);
}
return $results;
}
$parser = new DOMParser('<div class="item">1</div><div class="item">2</div>');
$items = [];
foreach ($parser->nodes() as $node) {
findByClass($node, 'item', $items);
}
echo count($items) . " items found"; // 2Extract Links
function extractLinks($node, &$links = []) {
if ($node->nodeName === 'A' && isset($node->attributes['HREF'])) {
$links[] = $node->attributes['HREF'];
}
foreach ($node->childNodes as $child) {
extractLinks($child, $links);
}
return $links;
}
$html = '<a href="/page1">Link 1</a><a href="/page2">Link 2</a>';
$parser = new DOMParser($html);
$links = [];
foreach ($parser->nodes() as $node) {
extractLinks($node, $links);
}
print_r($links);
// ['/page1', '/page2']