2016-09-28 101 views
2

從XML節點中提取布爾值的正確方法是什麼?我試過這個:帶有布爾值的DOMDocument節點

<?php 
$xml = "<node><code>false</code></node>"; 

$dom = new DOMDocument(); 
$dom->loadXML($xml); 

$nodeList = $dom->getElementsByTagName('code'); 
if ($nodeList->length == 1) { 
    if($nodeList->item(0)->nodeValue){ 
     echo 'VALID'; 
    } else { 
     echo 'NOT VALID'; 
    } 
} 
?> 

但我得到VALID作爲結果。

+0

型鑄造如果((布爾)$ nodeList->項(0) - >的nodeValue) –

+0

@ManinderpreetSingh'(布爾) 「假」'是__true__ –

回答

4

nodeValue將返回一個字符串,所以你需要做一個字符串比較。例如:

if($nodeList->item(0)->nodeValue != 'false'){ 
    echo 'VALID'; 
} else { 
    echo 'NOT VALID'; 
} 

您也可以考慮使用filter_var($string, FILTER_VALIDATE_BOOLEAN)的值轉換爲布爾值(例如,它也將轉換爲「1」或「是」一個布爾值),這取決於值的類型,你會進入XML。

+0

感謝。我應該var_dump-ed返回的值。 –

1

這裏是沒有這樣的事情作爲XML中的'布爾值'它是全部文本。但可以使用XPath表達式來驗證特定節點的值並返回它作爲直接的布爾:

$xml = <<<'XML' 
<nodes> 
    <node> 
    <code>false</code> 
    </node> 
    <node> 
    <code>true</code> 
    </node> 
</nodes> 
XML; 

$document = new DOMDocument(); 
$document->loadXml($xml); 
$xpath = new DOMXpath($document); 

foreach ($xpath->evaluate('//node') as $node) { 
    var_dump(
    $xpath->evaluate('code = "true"', $node) 
); 
} 

輸出:

bool(false) 
bool(true) 

另一種方法是作爲一個字符串來獲取值並使用filter_var()。

foreach ($xpath->evaluate('//node') as $node) { 
    var_dump(
    filter_var($xpath->evaluate('string(code)', $node), FILTER_VALIDATE_BOOLEAN) 
); 
}