[英]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.