我遇到了一個非常奇怪的錯誤。我正在編寫一個函數來驗證基於元素名稱的XML,在這種情況下作爲數組傳入。首先,我將輸入標準化爲一個SimpleXMLElement
對象;在這種情況下,我正在傳遞DOMDocument,並且我測試了它,它正確地轉換爲SimpleXMLElement
。對SimpleXMLElement的getName()調用返回致命錯誤「調用非對象的成員函數」
什麼讓我困惑的是,調用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)
...所以它似乎是工作,但致命錯誤仍然得到拋出。
回覆:「_so它似乎是工作,但致命錯誤仍然得到thrown._ 「:向我們展示引發異常的代碼。你所提供的功能顯然不會拋出你提到的異常,所以還有更多的東西,或者錯誤會在其他時間拋出。發生這個錯誤需要'$ xml',而不是你所說的 - 不是'SimpleXMLElement'實例。 – Tadeck