[英]DOMDocument DOMXpath store attributes like unique ids in php
我想检测 dom 结构的差异并比较节点。 因此,我为每个 DOMElement / DOMText 对象设置了一个特殊的对象属性“uniqid”。
这有效:
<?php
class _1
{
public $DOMDocument = null;
public $DOMXpath = null;
public function __construct()
{
$this->DOMDocument = new \DOMDocument();
$this->DOMDocument->loadHTML('<div>foo</div>');
$this->DOMXpath = new \DOMXpath($this->DOMDocument);
$nodes = $this->DOMXpath->query('/html/body//node()');
$nodes_id = 1;
foreach ($nodes as $nodes__value) {
$nodes__value->uniqid = $nodes_id;
$nodes_id++;
}
var_dump(@$this->DOMXpath->query('/html/body//text()')[0]->uniqid);
}
}
$_1 = new _1();
// 2
现在我只是在单独的函数中移动了逻辑:
<?php
class _2
{
public $DOMDocument = null;
public $DOMXpath = null;
public function __construct()
{
$this->DOMDocument = new \DOMDocument();
$this->DOMDocument->loadHTML('<div>foo</div>');
$this->DOMXpath = new \DOMXpath($this->DOMDocument);
$this->test1();
$this->test2();
}
public function test1()
{
$nodes = $this->DOMXpath->query('/html/body//node()');
$nodes_id = 1;
foreach ($nodes as $nodes__value) {
$nodes__value->uniqid = $nodes_id;
$nodes_id++;
}
}
public function test2()
{
var_dump(@$this->DOMXpath->query('/html/body//text()')[0]->uniqid);
}
}
$_2 = new _2();
// NULL
我现在有另一种方法来接收任何节点元素的唯一“id”:
$node->getNodePath()
就这么简单。 它适用于 DOMText 和 DOMElement 对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.