在尝试解析之前,我使用以下函数来验证来自Web API的XML:
function isValidXML($xml) {
$doc = @simplexml_load_string($xml);
if ($doc) {
return true;
} else {
return false;
}
}
由于某种原因,它在以下XML上失败了。虽然内容有点亮,但对我来说看起来很有用。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><connection-response-list xmlns="http://www.ca.com/spectrum/restful/schema/response" />
为什么会失败?我尝试了另一种验证使用DOMDocument和libxml_get_errors()的XML的方法,但它实际上更加变幻无常。
编辑:我应该提一下,我使用的是PHP 5.3.8。答案 0 :(得分:3)
我认为你的解释在这里错了 - var_dump($doc)
应该给你
object(SimpleXMLElement)#1 (0) {
}
- 但由于它是一个“空”的SimpleXMLElement,if($doc)
认为它是假的,因为PHP的松散类型比较规则。
您应该使用
if ($doc !== false)
此处 - 类型安全的比较。
(如果simplexml_load_string
实际失败,它会返回false
- 但它没有,请参阅上面显示的var_dump
输出,那是完全使用您给出的XML字符串进行测试。)
答案 1 :(得分:0)
SimpleXML需要某种&#34; root&#34;元件。根部的自动关闭标签不会削减它。
添加根元素时请参阅以下代码:
<?php
function isValidXML($xml)
{
$doc = @simplexml_load_string($xml);
if ($doc) {
return true;
} else {
return false;
}
}
var_dump(isValidXML('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><root><connection-response-list xmlns="http://www.ca.com/spectrum/restful/schema/response" /></root>'));
// returns true
print_r(isValidXML('<?xml version="1.0" encoding="UTF-8" standalone="yes"?><root><connection-response-list xmlns="http://www.ca.com/spectrum/restful/schema/response" /></root>'));
// returns 1
?>
希望有所帮助。