Kotchasan Framework Documentation
DOMNode
DOMNode
\Kotchasan\DOMNode represents a node in the DOM structure.
Creation
DOMNodes are typically created by DOMParser, but can be instantiated manually.
use Kotchasan\DOMNode;
// Create new element node
$node = new DOMNode(
'DIV', // nodeName
null, // parentNode
['class' => 'container'], // attributes
null // nodeValue (for text node)
);
// Create text node
$textNode = new DOMNode('', $parentNode, [], 'Hello World');Constructor
$node = new DOMNode($nodeName, $parentNode, $attributes, $nodeValue = null);| Parameter | Type | Description |
|---|---|---|
$nodeName |
string | Tag name (e.g., DIV, P). Empty for text nodes. |
$parentNode |
DOMNode/null | Parent node |
$attributes |
array | HTML attributes |
$nodeValue |
string/null | Value for text node |
Properties
nodeName
Tag name (uppercase).
echo $node->nodeName; // "DIV", "P", "SPAN"
// Text node has empty nodeName
if ($node->nodeName === '') {
echo "This is a text node";
}nodeValue
Value of text node.
// For text node
echo $node->nodeValue; // "Hello World"
// For element node, it is nullattributes
Array of HTML attributes (keys are uppercase).
$node->attributes['CLASS']; // "container"
$node->attributes['ID']; // "main"
$node->attributes['HREF']; // "https://..."parentNode
Reference to parent node.
if ($node->parentNode !== null) {
echo "Parent: " . $node->parentNode->nodeName;
}childNodes
Array of 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()
Check if node has children.
if ($node->hasChildNodes()) {
echo "Has " . count($node->childNodes) . " children";
}hasClass()
Check if node has a specific CSS class.
if ($node->hasClass('active')) {
echo "Node has class 'active'";
}
if ($node->hasClass('container')) {
// ...
}isInlineElement()
Check if node is an 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()
Get text content of node and all descendants.
$html = '<div><p>Hello</p><p>World</p></div>';
$parser = new DOMParser($html);
$div = $parser->nodes()[0];
echo $div->nodeText(); // "HelloWorld"unentities()
Convert HTML entities to characters.
$text = $node->unentities('Hello World&More');
// "Hello World&More"Supported entities:
→&→&<→<>→>'→'"→"
Usage Examples
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']