非常に奇妙なエラーが発生しています。要素名に基づいて 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に非常に慣れていないので、助けていただければ幸いです!
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)
...致命的なエラーがまだスローされることを除いて、動作しているように見えます。