simplexml_load_string()
SimpleXML es una extensión de PHP que ofrece una API sencilla para trabajar con documentos XML. Aprende a usar simplexml_load_string().
Introducción
SimpleXML es una extensión de PHP que proporciona una API simple y fácil de usar para trabajar con documentos XML. La función simplexml_load_string() es una de las muchas funciones que SimpleXML ofrece para trabajar con documentos XML. Es una herramienta potente que se puede utilizar para cargar un documento XML desde una cadena y crear un objeto SimpleXMLElement. En este artículo, analizaremos la función simplexml_load_string() en detalle y cómo se puede usar en PHP.
Comprender la función simplexml_load_string()
La función simplexml_load_string() en PHP carga un documento XML desde una cadena y crea un objeto SimpleXMLElement. (Nota: este es el enfoque procedimental; el equivalente orientado a objetos es new SimpleXMLElement($string).) La sintaxis para usar la función simplexml_load_string() es la siguiente:
Sintaxis
simplexml_load_string ( string $data [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]] ) : SimpleXMLElementAquí, $data es la cadena que contiene el documento XML a cargar. $class_name es un parámetro opcional que especifica el nombre de la clase que se usará para el objeto SimpleXMLElement. $options es un parámetro opcional que especifica opciones adicionales para cargar el documento XML. $ns es un parámetro opcional que especifica el espacio de nombres que se usará para el documento XML. $is_prefix es un parámetro opcional que indica si el espacio de nombres es un prefijo.
Ejemplo de uso
Veamos un ejemplo para comprender el uso de la función simplexml_load_string() en PHP:
Ejemplo de uso de la función simplexml_load_string() en PHP
En el ejemplo anterior, primero creamos una cadena que contiene un documento XML. Luego usamos la función simplexml_load_string() para cargar el documento XML desde la cadena y crear un objeto SimpleXMLElement. Usamos un bucle foreach para iterar sobre cada elemento book del documento XML e imprimir el título de cada libro.
Si tu XML proviene de un archivo o una URL en lugar de una cadena, usa simplexml_load_file() en su lugar.
Leer atributos
Los atributos XML se acceden con sintaxis de array ($element['attrName']), mientras que los elementos hijo usan sintaxis de propiedad ($element->child). Este es el error más común para los principiantes:
<?php
$xmlString = '<books><book id="1"><title>PHP Basics</title></book></books>';
$xml = simplexml_load_string($xmlString);
foreach ($xml->book as $book) {
echo "ID: " . $book['id'] . " - Title: " . $book->title . "\n";
}Esto imprime ID: 1 - Title: PHP Basics. Ten en cuenta que los valores de los atributos son en sí mismos objetos SimpleXMLElement, así que conviértelos con (string) o (int) si necesitas un escalar simple.
Usar el parámetro options
El tercer parámetro acepta constantes de opciones de libxml que cambian la forma en que se analiza el documento. Una opción muy utilizada es LIBXML_NOCDATA, que fusiona las secciones CDATA en nodos de texto plano para que puedas leerlos como contenido ordinario:
<?php
$xmlString = '<note><body><![CDATA[Hello <b>world</b>]]></body></note>';
$xml = simplexml_load_string($xmlString, "SimpleXMLElement", LIBXML_NOCDATA);
echo (string) $xml->body . "\n";Sin LIBXML_NOCDATA, $xml->body estaría vacío al acceder como cadena porque el contenido reside en un nodo CDATA.
Manejo de errores
Por defecto, simplexml_load_string() emite advertencias si el XML está mal formado. Para manejar los errores de forma elegante, puedes usar libxml_use_internal_errors():
<?php
$xmlString = '<books><book><title>PHP Basics</title></books>'; // Missing closing </book> tag
libxml_use_internal_errors(true);
$xml = simplexml_load_string($xmlString);
if ($xml === false) {
foreach (libxml_get_errors() as $error) {
echo "Error: ", trim($error->message), "\n";
}
} else {
foreach($xml->book as $book) {
echo $book->title . "\n";
}
}Cuando el XML no es válido, simplexml_load_string() devuelve false en lugar de lanzar una excepción. Llamar a libxml_use_internal_errors(true) suprime las advertencias predeterminadas y te permite inspeccionar los errores recopilados con libxml_get_errors(). Comprueba siempre si el resultado es false antes de usarlo.
Conclusión
simplexml_load_string() analiza una cadena XML en un objeto SimpleXMLElement, dándote acceso estilo objeto a los elementos hijo ($xml->child) y acceso estilo array a los atributos ($xml['attr']). Úsala cuando el XML ya esté en memoria; usa simplexml_load_file() cuando esté en un archivo o URL. Para un código robusto, habilita los errores internos de libxml y comprueba el valor de retorno antes de leer el resultado. Para profundizar en la API SimpleXML, consulta la descripción general de SimpleXML.