繁体   English   中英

DOMDocument DOMXpath 存储属性,如 php 中的唯一 ID

[英]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
  • 有人可以解释为什么 _1 有效而 _2 无效吗?
  • 如何安全地将属性(不是 dom 属性)“存储”到 DOMDocument / DOMText 对象以供以后访问?

我现在有另一种方法来接收任何节点元素的唯一“id”:

$node->getNodePath()

就这么简单。 它适用于 DOMText 和 DOMElement 对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM