0

在某些情况下,下面的 XPath 没有任何价值。

$place = extractNodeValue('div[contains(@class, "fn")]/a', $xPath);

我试图找出它是否不包含该empty功能并且$place=''没有运气。

有没有办法让这成为可能?

使用var_dump我得到NULL.

4

2 回答 2

0

如果您extractNodeValue()从问题xPath 或运算符 2 中指代您的函数,计算多于两个?目前它可能会返回:

  1. NULL - 如果您的 XPath 查询不匹配任何内容;
  2. 空字符串 ( '') - 如果 XPath 匹配某些节点,但您提供的属性或节点值确实是空字符串,因为DOMElement::getAttributeDOMNode::getValue都返回字符串。

无论如何,PHP empty认为这两种情况都是空的,所以如果没有一个例子来看看你是如何使用它的,就没有办法告诉你在哪里运气不好。

如果您不想区分上述两种情况,我的建议是将函数的输出标准化为:

function extractNodeValue($query, $xPath, $attribute = null) {
    $node = $xPath->query("//{$query}")->item(0);

    if (!$node) {
        return '';
    }

    return $attribute ? $node->getAttribute($attribute) : $node->nodeValue;
}

有了这个简单的验证如下应该工作:

$place = extractNodeValue('div[contains(@class, "fn")]/a', $xPath);

if (!empty($place)) {
    // do something
} else {
    // do something else
}
于 2013-07-04T22:31:05.983 回答
0

extractNodeValue()您的代码示例中缺少函数的定义。所以这个问题不能真正回答,就像一个黑匣子。

根据您问题中的 var_dump,您需要比较 if$place是否与 相同NULL,即$place === NULLor is_null($place)

示例(详细):

$place = extractNodeValue('div[contains(@class, "fn")]/a', $xPath);

$hasValue = $place !== NULL;

if ($hasValue) 
{
    # do something with $place
}
于 2013-07-04T16:35:47.580 回答