$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();
<?php// string to SimpleXMLElement$xml = new SimpleXMLElement($string);
// make any changes.
....
// convert the SimpleXMLElement back to string.$newString = $xml->asXML();
?>
Aquí hay una función que escribí para resolver este problema (asumiendo que la etiqueta no tiene atributos). Esta función mantendrá el formato HTML en el nodo:
functiongetAsXMLContent($xmlElement)
{
$content=$xmlElement->asXML();
$end=strpos($content,'>');
if ($end!==false)
{
$tag=substr($content, 1, $end-1);
return str_replace(array('<'.$tag.'>', '</'.$tag.'>'), '', $content);
}
elsereturn'';
}
$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);
echo getAsXMLContent($xml->child); // prints Hello World
Este es el tipo de objeto que obtiene para el campo de descripción de una fuente RSS. Es contrario a la intuición que funcione, pero fue la única solución aquí que me dio la cuerda adentro $xmlitem->description. Gracias.
Henrik Erlandsson
0
Probablemente, dependiendo de la fuente XML que pueda o no necesite utilizar __toString(); Tuve que usar el, de lo __toString()contrario, está devolviendo la cadena dentro de un SimpleXMLElement. Quizás necesito profundizar más en el objeto ...
Respuestas:
Puede usar el
SimpleXMLElement::asXML()
método 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();
fuente
$string = $xml->child->__toString();
Puedes usar el casting:
<?php $string = "<element><child>Hello World</child></element>"; $xml = new SimpleXMLElement($string); $text = (string)$xml->child;
$ text será 'Hola mundo'
fuente
En realidad, asXML () convierte la cadena en xml como su nombre dice:
<id>5</id>
Esto se mostrará normalmente en una página web, pero causará problemas cuando haga coincidir valores con otra cosa.
Puede usar la función strip_tags para obtener un valor real del campo como:
$newString = strip_tags($xml->asXML());
PD: si está trabajando con números enteros o flotantes, debe convertirlo en entero con intval () o floatval () .
$newNumber = intval(strip_tags($xml->asXML()));
fuente
Puede utilizar el
asXML
método como:<?php // string to SimpleXMLElement $xml = new SimpleXMLElement($string); // make any changes. .... // convert the SimpleXMLElement back to string. $newString = $xml->asXML(); ?>
fuente
Puede usar
->child
para obtener un elemento secundario llamado child .Este elemento contendrá el texto del elemento hijo .
Pero si prueba
var_dump()
esa variable, verá que en realidad no es una cadena PHP.La forma más fácil de evitar esto es realizar un
strval(xml->child);
Eso lo convertirá en una cadena PHP real.Esto es útil cuando se depura cuando se hace un bucle en su XML y se usa
var_dump()
para verificar el resultado.Entonces
$s = strval($xml->child);
.fuente
Aquí hay una función que escribí para resolver este problema (asumiendo que la etiqueta no tiene 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
fuente
A veces puedes simplemente encasillar:
// this is the value of my $xml object(SimpleXMLElement)#10227 (1) { [0]=> string(2) "en" } $s = (string) $xml; // returns "en";
fuente
$xmlitem->description
. Gracias.Probablemente, dependiendo de la fuente XML que pueda o no necesite utilizar
__toString()
; Tuve que usar el, de lo__toString()
contrario, está devolviendo la cadena dentro de un SimpleXMLElement. Quizás necesito profundizar más en el objeto ...fuente