2013-07-04 131 views
0

在某些情況下,以下XPath沒有任何值。如何檢查XPath的變量是否爲空?

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

我試圖找到,如果它不與empty功能和$place=''沒有運氣遏制。

有什麼辦法可以做到這一點嗎?使用var_dump我得到NULL

回答

0

您的代碼示例中缺少函數extractNodeValue()的定義。因此這不能真正回答,就像是一個黑匣子。

根據您問題中的var_dump,您需要比較是否$placeidentical to NULL,即$place === NULLis_null($place)

例(詳細):

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

$hasValue = $place !== NULL; 

if ($hasValue) 
{ 
    # do something with $place 
} 
0

如果你從你的問題xPath or operator two compute more than two?指你extractNodeValue()功能目前它可能會返回:

  1. NULL - 如果你的XPath查詢沒有按」不匹配任何東西;
  2. 空字符串('' - 如果匹配XPath一些節點,但你所提供的屬性或節點值確實是一個空字符串,因爲這兩個DOMElement::getAttributeDOMNode::getValue返回字符串。

總之,PHP empty認爲這兩種情況下爲空的,所以沒有一個例子來看看您如何使用它,有沒有辦法告訴你哪裏跑出來的運氣。

如果你不想區分上述2例,我的建議是,改成給函數的輸出規範:

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 
} 
相關問題