2016-09-28 8 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

тип литья, если ((BOOL) $ nodeList-> пункт (0) -> nodeValue) –

+0

@ManinderpreetSingh '(BOOL) "ложь"' это __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 это не такая вещь, как значение «boolean», это весь текст. Но вы можете использовать выражение 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) 
); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^