W3docs

xml_parser_create_ns()

La funzione xml_parser_create_ns() è una funzione built-in di PHP che crea un nuovo parser XML con supporto ai namespace.

La funzione xml_parser_create_ns() è una funzione built-in di PHP che crea un nuovo parser XML con supporto ai namespace. Appartiene all'estensione XML Parser e viene utilizzata per analizzare documenti XML. A differenza di SimpleXML, questa funzione opera con un'API pull event-driven, che consente di elaborare flussi XML in modo efficiente. Quando il supporto ai namespace è abilitato, il parser risolve automaticamente i prefissi dei namespace e passa nomi di elementi strutturati ai gestori, eliminando la necessità di una risoluzione manuale dei prefissi.

Sintassi

La sintassi della funzione xml_parser_create_ns() è la seguente:

Sintassi della funzione xml_parser_create_ns() in PHP

xml_parser_create_ns(?string $encoding = null, string $namespace_separator = '?')

Dove $encoding è la codifica dei caratteri utilizzata dai dati XML (ad es. 'UTF-8'), e $namespace_separator è il carattere usato per unire gli URI dei namespace con i nomi locali nei callback dei gestori (il valore predefinito è ?). Entrambi i parametri sono facoltativi.

Esempi di utilizzo

Vediamo alcuni esempi pratici di utilizzo di xml_parser_create_ns() in PHP.

Esempio 1: Creazione di un parser XML

Per creare un parser, chiamare xml_parser_create_ns(). Questa funzione restituisce una risorsa parser che deve essere configurata con gestori di elementi e caratteri prima dell'analisi.

creare un nuovo parser XML con supporto ai namespace

$parser = xml_parser_create_ns();
// Configure handlers and parse data...

Questo codice crea un nuovo parser con l'elaborazione dei namespace abilitata. La risorsa parser viene poi utilizzata con xml_set_element_handler() e xml_parse() per elaborare i dati XML.

Esempio 2: Analisi dei dati XML con prefissi di namespace

Quando il supporto ai namespace è abilitato, l'estensione XML Parser risolve automaticamente i prefissi dei namespace. I nomi degli elementi passati ai gestori sono formattati come namespace_uri?nome_locale (usando il separatore predefinito). La risoluzione dei namespace viene gestita dal parser stesso, non manualmente.

analizzare dati XML utilizzando l'estensione XML Parser

$parser = xml_parser_create_ns();
$xml_data = '<?xml version="1.0"?><root xmlns:ns="http://example.com"><ns:child>value</ns:child></root>';

xml_set_element_handler($parser, function($parser, $name) {
    echo "Element: $name\n";
}, function($parser, $name) {
    echo "End Element: $name\n";
});

xml_parse($parser, $xml_data);
xml_parser_free($parser);

Questo codice crea un parser, definisce i gestori per acquisire i nomi degli elementi e analizza la stringa XML. Il nome dell'elemento ns:child viene risolto automaticamente e passato al gestore come http://example.com?child.

Esempio 3: Personalizzazione della codifica dei caratteri e del separatore

Per impostazione predefinita, xml_parser_create_ns() presuppone che i dati XML utilizzino la codifica predefinita del sistema. È possibile specificare una codifica e un separatore di namespace personalizzato per garantire una corretta gestione dei caratteri e la formattazione dei callback.

personalizzare la codifica e il separatore per una corretta gestione dei caratteri

$parser = xml_parser_create_ns('UTF-8', '|');
$xml_data = '<?xml version="1.0"?><root xmlns:ns="http://example.com"><ns:child>value</ns:child></root>';

xml_set_element_handler($parser, function($parser, $name) {
    echo "Element: $name\n";
}, null);

xml_parse($parser, $xml_data);
xml_parser_free($parser);

Questo codice crea un parser con codifica UTF-8 e un separatore | personalizzato. La risorsa parser viene liberata dopo l'uso per evitare perdite di memoria.

Esercizio

Pratica
Quale output produrrà il codice PHP disponibile all'URL indicato?
Quale output produrrà il codice PHP disponibile all'URL indicato?
Was this page helpful?