simplexmlelement recorrer new example php xml simplexml

new - recorrer simplexmlelement object php



SimpleXml a la cadena (7)

¿Hay alguna función que haga una cadena de PHP simpleXMLElement?


Aquí hay una función que escribí para resolver este problema (suponiendo que la etiqueta no tenga atributos). Esta función mantendrá el formato HTML en el nodo:

function getAsXMLContent($xmlElement) { $content=$xmlElement->asXML(); $end=strpos($content,''>''); if ($end!==false) { $tag=substr($content, 1, $end-1); return str_replace(array(''<''.$tag.''>'', ''</''.$tag.''>''), '''', $content); } else return ''''; } $string = "<element><child>Hello World</child></element>"; $xml = new SimpleXMLElement($string); echo getAsXMLContent($xml->child); // prints Hello World


En realidad, como XML () convierte la cadena en xml como su nombre dice:

<id>5</id>

Esto se mostrará normalmente en una página web pero causará problemas al hacer coincidir los valores con otra cosa.

Puede usar la función strip_tags para obtener el valor real del campo como:

$newString = strip_tags($xml->asXML());

PD: si trabajas con enteros o números flotantes, necesitas convertirlo a entero con intval () o floatval () .

$newNumber = intval(strip_tags($xml->asXML()));


Esta es una publicación anterior, pero mis hallazgos podrían ayudar a alguien.

Probablemente, dependiendo del feed xml, puede / no necesitar usar __toString (); Tuve que usar __toString (), de lo contrario, devolvería la cadena dentro de un SimpleXMLElement. Tal vez necesito profundizar el objeto más ...


Puede usar ->child para obtener un elemento hijo llamado child .

Este elemento contendrá el texto del elemento secundario .

Pero si prueba var_dump() en esa variable, verá que en realidad no es una cadena de PHP.

La forma más fácil de evitar esto es realizar un strval(xml->child); Eso lo convertirá en una cadena de PHP real.

Esto es útil cuando se depura al hacer un bucle en su XML y usar var_dump() para verificar el resultado.

Entonces $s = strval($xml->child); .


Puede usar el método asXML como:

<?php // string to SimpleXMLElement $xml = new SimpleXMLElement($string); // make any changes. .... // convert the SimpleXMLElement back to string. $newString = $xml->asXML(); ?>


Puedes usar casting:

<?php $string = "<element><child>Hello World</child></element>"; $xml = new SimpleXMLElement($string); $text = (string)$xml->child;

$ texto será ''Hola mundo''


Puede usar el método SimpleXMLElement::asXML() para lograr esto:

$string = "<element><child>Hello World</child></element>"; $xml = new SimpleXMLElement($string); // The entire XML tree as a string: // "<element><child>Hello World</child></element>" $xml->asXML(); // Just the child node as a string: // "<child>Hello World</child>" $xml->child->asXML();