如何在XML文档中存储布尔值,以便您可以使用PHP的SimpleXML类读取它们?
我有以下XML文档:
<?xml version='1.0' standalone='yes'?>
<status>
<investigating></investigating>
<log>
sample log
</log>
</status>
Run Code Online (Sandbox Code Playgroud)
以下php脚本来阅读它:
if (file_exists($filename)) {
$statusXml = simplexml_load_file($filename);
if ($statusXml) {
$investigating = (bool)($statusXml->investigating);
echo $investigating;
}
} else {
exit('Failed to open ' . $filename .'.');
}
Run Code Online (Sandbox Code Playgroud)
无论我放在标签中,它总是被读为真.我试过"0",空字符串,"假"和其他一些想法,但没有任何效果.我认为空字符串应该是因为我在本文档中找到的内容:http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
考虑到:
......我不会依赖自动型杂耍.简单地说,定义一个您熟悉的语法,在读取时转换为字符串并编写您自己的代码以转换为布尔值.
<?php
function get_bool($value){
switch( strtolower($value) ){
case 'true': return true;
case 'false': return false;
default: return NULL;
}
}
$data = '<?xml version="1.0"?>
<data>
<empty_tag/>
<true_tag>true</true_tag>
<false_tag>false</false_tag>
</data>
';
$xml = simplexml_load_string($data);
var_dump( get_bool((string)$xml->empty_tag) );
var_dump( get_bool((string)$xml->true_tag) );
var_dump( get_bool((string)$xml->false_tag) );
Run Code Online (Sandbox Code Playgroud)
无论如何,如果你对如何(bool)工作感到好奇,你基本上是在处理对象,所以这是在转换为布尔值时适用的规则:
这意味着,你将只能得到FALSE与<investigating />(和TRUE具有绝对别的).我可以想到的扩大可能的TRUE值范围的技巧是执行双重转换:
(bool)(string)$xml->investigating
Run Code Online (Sandbox Code Playgroud)
更新:不要忘记调试var_dump().如果你使用echo你会发现,TRUE布尔强制转换为'1'字符串,并FALSE以''(空字符串).