Bei der Verwendung von PHP -XML -Parsingfunktionen ist XML_Set_Default_handler eine sehr nützliche Funktion, die den Standard -Rückrufprozessor für unübertroffene XML -Elemente oder Textinhalte festlegt, die während der Parsen auftreten. Wenn Ihre Rückruffunktion nicht ausgelöst wird, kann dies aus mehreren Gründen liegen. Dieser Artikel wird einige häufige Gründe im Detail analysieren und entsprechende Lösungen bereitstellen.
Bei Verwendung von xml_set_default_handler muss die Definition der Rückruffunktion den PHP -Anforderungen für die Rückruffunktion entsprechen. Wenn die Rückruffunktion falsch definiert ist, ignoriert PHP die Funktion, was dazu führt, dass der Rückruf nicht abgefeuert wird. Die Rückruffunktion sollte drei Parameter akzeptieren:
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">defaultHandler</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$parser</span></span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Default handler triggered: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">htmlspecialchars</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>
In:
$ parser ist eine XML -Parser -Ressource.
$ data sind Textdaten, die nicht von anderen Rückrufen verarbeitet wurden.
Stellen Sie sicher, dass die Rückruffunktion zwei Parameter enthält und der erste Parameter ignoriert werden kann.
xml_set_default_handler wird nur ausgelöst, wenn in den XML -Daten Inhalte vorhanden sind, die nicht von anderen Rückruffunktionen verarbeitet werden. Wenn Sie beispielsweise eine spezifischere Rückruffunktion mit xml_set_element_handler oder xml_set_character_data_handler festlegen, wird der XML_Set_Default_handler nur ausgelöst, wenn keiner dieser Rückrufe das aktuelle Element oder Text verwandelt. Wenn alle Elemente und Daten mit expliziten Rückruffunktionen verarbeitet werden, wird der Standard -Rückruf nicht ausgelöst.
Problemumgehung: Stellen Sie sicher, dass es etwas gibt, das nicht von einer bestimmten Rückruffunktion verarbeitet wird, oder überprüfen Sie, ob Sie andere Rückruffunktionen missbrauchen.
Wenn es ein Problem mit den XML -Daten selbst gibt, kann der Parser frühzeitig beenden, ohne den Ort zu erreichen, an dem die XML_Set_Default_handler ausgelöst werden muss. Beispielsweise können bestimmte illegale Zeichen in XML oder nicht konformen Tags dazu führen, dass die Parsen scheitert. Zu diesem Zeitpunkt kann der XML_Set_Default_handler nicht ausgeführt werden.
Problemumgehung: Überprüfen Sie, ob die XML -Daten dem Standard entsprechen. Verwenden Sie libxML_USE_INTERNAL_ERRORS (TRUE), um die Fehlerbehebung, die Erfassung und Ausgabe von XML -Parsingfehlern zu aktivieren:
<span><span><span class="hljs-title function_ invoke__">libxml_use_internal_errors</span></span><span>(</span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">xml_set_default_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">'defaultHandler'</span></span><span>);
</span></span>
Bei der Registrierung von xml_set_default_handler wird die Rückruffunktion auch nicht ausgelöst, wenn der Parser noch nicht gestartet wurde oder die Reihenfolge der Registrierung von Rückrufen falsch ist. Stellen Sie sicher, dass die Rückruffunktion vor dem XML_PARSE -Anruf registriert ist.
<span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">xml_set_default_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">'defaultHandler'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">xml_parse</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-variable">$xmlData</span></span><span>);
</span></span>
Wenn der Parser vor oder während des Anrufs nach xml_parse inaktiv oder geschlossen ist, kann der XML_SET_DEFAULT_HANDLER möglicherweise nicht abgefeuert werden. Überprüfen Sie in diesem Fall den Status des Parsers und stellen Sie sicher, dass alle Rückruffunktionen festgelegt werden, bevor Sie XML_PARSE aufrufen.
Schließlich kann es Unterschiede zur Unterstützung der XML -Parsen für verschiedene Versionen von PHP geben, insbesondere wenn verschiedene Parsing -Bibliotheken oder -versionen konfiguriert werden. Wenn die XML -Erweiterung in PHP nicht aktiviert ist oder die Version zu niedrig ist, funktioniert XML_Set_Default_handler möglicherweise nicht ordnungsgemäß.
Problemumgehung: Überprüfen Sie den Installationsstatus der PHP -Version und der XML -Erweiterung. Sie können relevante Konfigurationsinformationen über phpinfo () anzeigen.
Wenn die Rückruffunktion von xml_set_default_handler nicht ausgelöst wird, kann es mehrere Aspekte wie eine falsche Rückruffunktionsdefinition, die Auftragsregistrierungsreihenfolge für Rückrufe, XML -Datenprobleme oder PHP -Konfiguration umfassen. Dieses Problem kann effektiv gelöst werden, indem diese häufigen Ursachen sorgfältig überprüft werden. Das XML -Datenformat ist korrekt, um sicherzustellen, dass die Rückruffunktion in Übereinstimmung mit den Anforderungen definiert ist. Wenn Sie die Rückruffunktion zum richtigen Zeitpunkt registrieren, können Sie solche Probleme vermeiden.