从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
。
答案 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)
);
}