我遇到了一个非常奇怪的错误。我正在编写一个函数来根据元素名称验证XML,在这种情况下作为数组传入。首先,我将输入规范化为SimpleXMLElement
对象;在这种情况下,我传入一个DOMDocument,我测试了它,它正确转换为SimpleXMLElement
。
让我感到困惑的是,调用getName()
将引发以下内容:
PHP Fatal error: Call to a member function getName() on a non-object
但使用exit($xml->getName())
(或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新手,所以非常感谢帮助!
P.S。要明确到底发生了什么,请使用以下代码:
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)
...所以它似乎有效,除了致命的错误仍然被抛出。
答案 0 :(得分: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());
};
}