如何在XML文档中存储布尔值,以便您可以使用PHP的SimpleXML类读取它们?
我有以下XML文档:
<?xml version='1.0' standalone='yes'?>
<status>
<investigating></investigating>
<log>
sample log
</log>
</status>
以下php脚本来阅读它:
if (file_exists($filename)) {
$statusXml = simplexml_load_file($filename);
if ($statusXml) {
$investigating = (bool)($statusXml->investigating);
echo $investigating;
}
} else {
exit('Failed to open ' . $filename .'.');
}
无论我放在标签中,它总是被读为真。我试过“0”,空字符串,“假”和其他一些想法,但没有任何效果。我认为空字符串应该是因为我在本文档中找到的内容:http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting
答案 0 :(得分:6)
考虑到:
......我不会依赖自动型杂耍。简单地说,定义一个您熟悉的语法,在读取时转换为字符串并编写您自己的代码以转换为布尔值。
<?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) );
无论如何,如果您对如何使(bool)
工作感到好奇,那么您基本上是在处理对象,因此这是在转换为布尔值时应用的规则:
这意味着您只能FALSE
使用<investigating />
(TRUE
以及其他任何内容)。我可以想到的扩大可能的TRUE值范围的技巧是执行双重投射:
(bool)(string)$xml->investigating
更新:不要忘记使用var_dump()
进行调试。如果您使用echo
,您会发现TRUE
布尔转换为'1'
字符串,FALSE
转换为''
(空字符串)。
答案 1 :(得分:-1)
你没有抓住正确的元素。
if (file_exists($filename)) {
$statusXml = simplexml_load_file($filename);
if ($statusXml = simplexml_load_file($filename)) {
$investigating = (bool) $statusXml->investigating[0];
echo $investigating;
}
}
答案 2 :(得分:-1)
这是相当陈旧的,以防万一有人正在寻找答案。你可以使用:
<example is-true=1>
或
<example is-true=0>
这应该可以正常工作。
如果在其上使用if语句,则使用<example is-true="0">
的注释将返回true。