SimpleXMLElement::registerXPathNamespace

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

SimpleXMLElement::registerXPathNamespace Crea un contexto prefijo/ns para la próxima consulta XPath

Descripción

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

Crea un contexto prefijo/ns para la próxima consulta XPath. En particular, esto es útil si el proveedor del documento XML dado modifica los prefijos de espacio de nombres. registerXPathNamespace creará un prefijo para el espacio de nombres asociado, permitiendo el acceso a los nodos en este espacio de nombres sin necesidad de cambiar el código para permitir los nuevos prefijos dictados por el proveedor.

Parámetros

prefix

El prefijo de espacio de nombres a utilizar en la consulta XPath para el espacio de nombres dado en namespace.

namespace

El espacio de nombres a utilizar para la consulta XPath. Esto debe coincidir con un espacio de nombres que es utilizado por el documento XML, de lo contrario la consulta XPath que utiliza prefix no retornará ningún resultado.

Valores devueltos

Esta función retorna true en caso de éxito o false si ocurre un error.

Ejemplos

Ejemplo #1 Fija un prefijo de espacio de nombres para utilizar en una consulta 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";
}

?>

El ejemplo anterior mostrará :

Chapter 1
Chapter 2

Observe cómo el documento XML mostrado en este ejemplo fija un espacio de nombres con el prefijo chap. Imagine que este documento (o otro similar) pudiera haber utilizado un prefijo c en el pasado para el mismo espacio de nombres. Dado que ha cambiado, la consulta XPath no retornaría los resultados apropiados y la consulta debería ser modificada. El uso de registerXPathNamespace evita las modificaciones futuras de la consulta incluso si el proveedor cambia el prefijo de espacio de nombres.

Ver también

add a note

User Contributed Notes 1 note

up
2
Lea Hayes
14 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');
?>
To Top