0

我遇到了一个非常奇怪的错误。我正在编写一个函数来根据元素名称验证 XML,在本例中作为数组传入。首先,我将输入标准化为一个SimpleXMLElement对象;在这种情况下,我传入一个 DOMDocument,并对其进行了测试,它正确转换为SimpleXMLElement.

让我感到困惑的是,调用getName()会抛出以下内容:

PHP Fatal error:  Call to a member function getName() on a non-object

但是使用exit($xml->getName())(or echo) 将返回正确的结果 - 根元素名称!

相关代码:

function validateXML($xml, $format='') {
(get_class($xml) !== 'SimpleXMLElement') ?
    ((get_class($xml) === 'DOMDocument') ?
        $xml = simplexml_import_dom($xml)
        : $xml = simplexml_load_string($xml))
    : $xml = $xml;
$rootName = ($xml->getName());
if ($rootName != $format[0]) {
    exit($xml->getName())));
}

此外,如果重要的话,服务器正在运行 PHP 5.3

我对 PHP 非常陌生,因此非常感谢您的帮助!

PS为了清楚到底发生了什么,下面的代码:

function validateXML($xml, $format='') {
    echo(get_class($xml);
    $xml = simplexml_import_dom($xml);
    echo(get_class($xml);
    echo($xml->getName());
}

输出到服务器

DOMDocument
SimpleXMLElement
'ElementName' (the correct root name of my XML document)

...所以它似乎正在工作,除了致命错误仍然被抛出。

4

1 回答 1

1

$xml当XML 无效时,您的代码(假设它与您在问题中编写的内容足够接近)将失败,因为simplexml_load_string()

返回一个 SimpleXMLElement 类的对象,其属性包含 xml 文档中保存的数据,如果失败,则返回 FALSE

如果您仍然没有看到这一点,我建议您使用if语句而不是第三语句来重写您的代码。您的函数,当$xml不是SimpleXMLElement实例,也不是DOMDocument实例时,将有效地归结为以下函数:

function validateXML($xml, $format='') {
    simplexml_load_string($xml);
    $rootName = ($xml->getName());
    if ($rootName != $format[0]) {
        exit($xml->getName());
    };
}
于 2013-02-04T01:01:50.420 回答