SimpleXMLElement::registerXPathNamespace

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

SimpleXMLElement::registerXPathNamespace — CrĂ©e un contexte prĂ©fixe/ns pour la prochaine requĂȘte XPath

Description

public function SimpleXMLElement::registerXPathNamespace(string $prefix, string $namespace): bool

CrĂ©e un contexte prĂ©fixe/ns pour la prochaine requĂȘte XPath. En particulier, ceci est utile si le fournisseur du document XML donnĂ© modifie les prĂ©fixes d'espace de noms. registerXPathNamespace crĂ©era un prĂ©fixe pour l'espace de noms associĂ©, autorisant l'accĂšs aux nƓuds dans cet espace de noms sans avoir besoin de changer le code pour autoriser les nouveaux prĂ©fixes dictĂ©s par le fournisseur.

Liste de paramĂštres

prefix

Le prĂ©fixe d'espace de noms Ă  utiliser dans la requĂȘte XPath pour l'espace de noms donnĂ© dans namespace.

namespace

L'espace de noms Ă  utiliser pour la requĂȘte XPath. Ceci doit concorder avec un espace de noms qui est utilisĂ© par le document XML, sinon la requĂȘte XPath qui utilise prefix ne retournera aucun rĂ©sultat.

Valeurs de retour

Cette fonction retourne true en cas de succĂšs ou false si une erreur survient.

Exemples

Exemple #1 Fixe un prĂ©fixe d'espace de noms pour utiliser dans une requĂȘte XPath

<?php

$xml
= <<<EOD
<book xmlns:chap="http://example.org/chapter-title">
<title>My Book</title>
<chapter id="1">
<chap:title>Chapter 1</chap:title>
<para>Donec velit. Nullam eget tellus vitae tortor gravida scelerisque.
In orci lorem, cursus imperdiet, ultricies non, hendrerit et, orci.
Nulla facilisi. Nullam velit nisl, laoreet id, condimentum ut,
ultricies id, mauris.</para>
</chapter>
<chapter id="2">
<chap:title>Chapter 2</chap:title>
<para>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin
gravida. Phasellus tincidunt massa vel urna. Proin adipiscing quam
vitae odio. Sed dictum. Ut tincidunt lorem ac lorem. Duis eros
tellus, pharetra id, faucibus eu, dapibus dictum, odio.</para>
</chapter>
</book>
EOD;

$sxe = new SimpleXMLElement($xml);

$sxe->registerXPathNamespace('c', 'http://example.org/chapter-title');
$result = $sxe->xpath('//c:title');

foreach (
$result as $title) {
echo
$title . "\n";
}

?>

L'exemple ci-dessus va afficher :

Chapter 1
Chapter 2

Il est Ă  noter que le document XML montrĂ© dans cet exemple fixe un espace de nom avec le prĂ©fixe chap. Imaginez que ce document (ou un autre similaire) puisse avoir utilisĂ© un prĂ©fixe c dans le passĂ© pour le mĂȘme espace de noms. Puisqu'il a changĂ©, la requĂȘte XPath ne retournerait plus les rĂ©sultats appropriĂ©s et la requĂȘte devrait ĂȘtre modifiĂ©e. L'utilisation de registerXPathNamespace Ă©vite les modifications futures de la requĂȘte mĂȘme si le fournisseur change le prĂ©fixe d'espace de noms.

Voir aussi

add a note

User Contributed Notes 1 note

up
3
Lea Hayes ¶
15 years ago
Looks like you have to use registerXPathNamespace for each node when using XPath:

<?php
$xml = simplexml_load_file($filename);

$xml->registerXPathNamespace('test', 'http://example.com');

$shopping_element = $xml->xpath('test:shopping-list');

// Breaks with out the following line:

$shopping_element->registerXPathNamespace('test', 'http://example.com');

$fruit = $shopping_element->xpath('test:fruit');
?>