Der Namespace -Mechanismus ist entscheidend, wenn komplexe XML -Dokumente analysiert werden. Es vermeidet effektiv Konflikte zwischen Element- und Attributnamen, insbesondere wenn mehrere XML -Vokabeln gemischt verwendet werden. In PHP bieten die Funktionen von XML_SET_START_NAMEPACE_DECL_HANDLER und XML_SET_END_NAMEPACE_DECL_HANDLER eine Möglichkeit, den Lebenszyklus des Namespace genau zu steuern und in Verbindung mit dem XML -Namespace in Verbindung mit ihm eine Feinverwaltung des XML -Namespace zu erreichen.
Eine XML -Namespace -Deklaration wird normalerweise im Element Start -Tag angezeigt, zum Beispiel:
<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
In diesem Beispiel werden zwei verschiedene Namespaces H und F für HTML- bzw. Möbelbeschreibung definiert und verwendet. Wenn die Parsen dieser Struktur keine Namespace -Erklärungen abhängt, wird dies Schwierigkeiten bei der Identifizierung von Elementen verursachen.
Diese Funktion wird verwendet, um eine Rückruffunktion zu registrieren, die ausgelöst wird, wenn eine neue Namespace -Deklaration auftritt:
bool xml_set_start_namespace_decl_handler ( resource $parser , callable $handler )
Die Rückruffunktion akzeptiert drei Parameter:
$ Parser : Parser Resource;
$ Präfix : Namespace Präfix (möglicherweise leerer Zeichenfolge);
$ URI : Namespace Uri.
Diese Funktion registriert einen Rückruf und wird am Ende des Namespace Deklaration Scope aufgerufen:
bool xml_set_end_namespace_decl_handler ( resource $parser , callable $handler )
Die Rückruffunktion akzeptiert zwei Parameter:
$ Parser : Parser Resource;
$ Präfix : Namespace Präfix.
Das folgende Beispiel zeigt, wie diese beiden Funktionen verwendet werden, um mit XML -Namespaces zu arbeiten:
<?php
$xml = <<<XML
<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3schools.com/furniture">
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
</root>
XML;
$parser = xml_parser_create();
xml_set_start_namespace_decl_handler($parser, function($parser, $prefix, $uri) {
echo "Start Namespace: prefix = {$prefix}, uri = {$uri}\n";
});
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) {
echo "End Namespace: prefix = {$prefix}\n";
});
xml_set_element_handler($parser,
function($parser, $name, $attrs) {
echo "Start Element: {$name}\n";
},
function($parser, $name) {
echo "End Element: {$name}\n";
}
);
xml_parse($parser, $xml, true);
xml_parser_free($parser);
Führen Sie den obigen Code aus und die folgenden Informationen werden ausgegeben:
Start Namespace: prefix = h, uri = http://www.w3.org/TR/html4/
Start Namespace: prefix = f, uri = http://www.w3schools.com/furniture
Start Element: ROOT
Start Element: H:TABLE
Start Element: H:TR
Start Element: H:TD
End Element: H:TD
Start Element: H:TD
End Element: H:TD
End Element: H:TR
End Element: H:TABLE
Start Element: F:TABLE
Start Element: F:NAME
End Element: F:NAME
Start Element: F:WIDTH
End Element: F:WIDTH
Start Element: F:LENGTH
End Element: F:LENGTH
End Element: F:TABLE
End Element: ROOT
End Namespace: prefix = f
End Namespace: prefix = h
Es ist ersichtlich, dass wenn ein Namespace -Bereich beginnt oder endet, die relevanten Verarbeitungsfunktionen ausgelöst werden, sodass Entwickler das Parsing -Verhalten basierend auf dem Namespace aufzeichnen, verwalten und sogar dynamisch ändern können.
Erstellen eines Namespace-Kontextstacks : Sie können eine Stapelstruktur in der Verarbeitungsfunktion erstellen, um den aktuell aktiven Namespace aufzuzeichnen, der die kontextbewusste Parsen von XML-Knoten erleichtert.
Mischinhalte handhaben : Wenn ein XML -Dokument mehrere Namespaces zum Nest verwendet, können Sie Präfixe und URIs kombinieren, um die Bedeutung des Elements zu identifizieren, um Namenskonflikte zu vermeiden.
Skalierbarkeitsdesign : Namespace-bewusstes Parser-Design ist für Systeme, die mehrere XML-Schemata wie Seifen, RSS, Atom usw. unterstützen, unerlässlich.
PHP bietet leistungsstarke Tools für die Behandlung komplexer Namespace -Strukturen über die Funktionen xml_set_start_namespace_decl_handler und xml_set_end_namespace_decl_handler . Durch die flexible Verwendung dieser beiden Funktionen können Entwickler ein hochkompatible und gut strukturiertes XML-Parser-System erstellen, das für Datenschnittstellen von Drittanbietern und Standardprotokollformaten von großem Nutzen ist.
In der tatsächlichen Entwicklung kann die Kombination von Geschäftssemantik- und Namespace -Mechanismen XML analysieren, die robuster und wartbarer sind. Wenn der XML, mit dem Sie es zu tun haben, aus externen Systemen wie https://gitbox.net/api/xmlfeed stammt, werden diese technischen Mittel besonders kritisch.