PHP XML验证在有效的XML上失败

时间:2014-08-26 19:59:17

标签: php xml validation

在尝试解析之前,我使用以下函数来验证来自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。

2 个答案:

答案 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

?>

希望有所帮助。