DOMXPath :: evaluate():来自错误文档的节点

时间:2014-02-01 12:10:49

标签: php dom

这里有一个有趣的,我不能为我的生活弄清楚。

我已经创建了一些扩展PHP DOMNode类的类,并且在尝试测试它们时,我在标题中收到错误,我不明白为什么,因为Node肯定来自正确的Document,因为我理解它。

我的PHPUhit测试如下:

class XPathTest extends \PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        $this->doc = new Document();
        $this->xpath = new XPath($this->doc);
    }

    /**
     * A single node should be returned from this expression
     */
    public function testEvaluate()
    {
        $xml = '<data><test>node</test></data>';

        $this->doc->loadXML($xml);

        $result = $this->xpath->evaluate('/data/test/text()', $this->doc);

        $this->assertInstanceOf('\\DOMText', $result);
        $this->assertEquals($result->nodeValue, 'node');
    }

}

此时我的扩展类没有什么特别之处,它们具有父级的默认功能。

DOMXPath::evaluate(): Node From Wrong Document

之前有没有人遇到此错误?

如果我没有将$this->doc传递给xpath evaluate函数,我根本就没有结果。

1 个答案:

答案 0 :(得分:1)

事实证明,在DOMDocument加载了XML之后,必须将DOMXPath对象添加到DOMDocument

因此,以下是实例化此测试的正确方法:

class XPathTest extends \PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        $this->doc = new Document();
        $xml = '<data><test>node</test></data>';
        $this->doc->loadXML($xml);

        $this->xpath = new XPath($this->doc);
    }

    /**
     * A single node should be returned from this expression
     */
    public function testEvaluate()
    {
        $result = $this->xpath->evaluate('//test/text()');

        $this->assertInstanceOf('\\Manneken\\Dom\\Text', $result);
        $this->assertEquals($result->nodeValue, 'node');
    }

}

咄。