我是PHP和SimpleXMl的新手。
在这些测试中,我不会指望错误。
$xml=new SimpleXMLElement('<a><b>123</b></a>');
var_dump($xml);
echo $xml ? "true": "false";
或
$xml=new SimpleXMLElement('<a><b></b></a>');
var_dump($xml);
echo $xml ? "true": "false";
但是,即使返回了XMLSimpleElement对象,第二个返回false。 我的xml doc在任何地方都有名称空间存在同样的问题。
这意味着我无法测试失败的XML解析
if (!xml)
返回false
但$xml->childen($namespace)
没有。
请指教 TIA 莲
答案 0 :(得分:1)
我无法重现您的问题,但我会尝试提供一些提示。
首先,这是converting objects to booleans:
时的规则转换为布尔值时,以下值被视为
FALSE
:
[...]特殊类型NULL(包括未设置的变量)
[...] SimpleXML对象空 标签其他每个值都被视为TRUE(包括任何资源)。
其次,SimpleXMLElement constructor总是返回一个对象,但它可以抛出警告和异常。
所以这些是可能性:
// Casts as TRUE because it's an object
$xml=new SimpleXMLElement('<a><b>123</b></a>');
var_dump($xml, (bool)$xml);
unset($xml);
// Casts as FALSE because it's an SimpleXMLElement object for an empty tag
$xml=new SimpleXMLElement('<a />');
var_dump($xml, (bool)$xml);
unset($xml);
// Casts as FALSE because the $xml variable was never set sucessfully so it's not even set
try{
$xml=new SimpleXMLElement('');
}catch(Exception $e){
}
var_dump($xml, (bool)$xml); // Notice: Undefined variable: xml
unset($xml);
答案 1 :(得分:0)
PHP(5+)中的对象评估为TRUE
,始终。
一个例外是从空标记创建的SimpleXML
个对象 - 请参阅http://php.net/manual/en/language.types.boolean.php
$xml = new SimpleXMLElement('<b></b>');
符合FALSE
SimpleXML
个对象(FALSE === (bool) $xml;
)。
然而
$xml = new SimpleXMLElement('');
抛出异常,如果没有捕获,将暂停你的程序。如果被抓住,则未设置$xml
。
答案 2 :(得分:0)
您可以在http://www.php.net/manual/en/language.types.boolean.php上找到评估为真/假的所有内容(找到“当转换为布尔值时,以下值被视为FALSE:”)
如果SimpleXMLElement对象失败,则会抛出异常。以下代码应该满足您的需求:
try
{
$xml=new SimpleXMLElement('');
var_dump($xml);
echo 'true';
}
catch
{
echo 'false';
}
要评估为true / false,您可能会查看===,以显式计算为false。
$test = '';
echo $test ? 'true' : 'false'; // will output false
echo $test !== false ? 'true' : 'false'; // will output true