【问题标题】:DOMDocument node with boolean value具有布尔值的 DOMDocument 节点
【发布时间】:2016-09-28 12:06:39
【问题描述】:

从 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

【问题讨论】:

  • 类型转换 if((bool) $nodeList->item(0)->nodeValue)
  • @ManinderpreetSingh (bool)"false"true

标签: php xml domdocument


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。我应该对返回的值进行 var_dump 处理。
【解决方案2】:

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)
  );
}

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2013-11-09
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多