具有布尔值的DOMDocument节点

时间:2016-09-28 12:06:40

标签: php xml domdocument

从XML节点提取布尔值的正确方法是什么?我试过这个:

<?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

2 个答案:

答案 0 :(得分:4)

nodeValue将返回一个字符串,因此您需要进行字符串比较。例如:

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

您也可以考虑使用filter_var($string, FILTER_VALIDATE_BOOLEAN)将值转换为布尔值(例如,它也会将“1”或“是”转换为布尔值),具体取决于您将获得的值的类型XML。

答案 1 :(得分: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)
  );
}