繁体   English   中英

具有布尔值的 DOMDocument 节点

[英]DOMDocument node with boolean value

从 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

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

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

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

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

另一种解决方案

(  filter_var( $xmlNodeElement->current(), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) ) ? echo "Valid" : echo "Not valid";

当前初始化时,显示第一个节点元素更多关于跟随链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM