2010-09-11 17 views

Respuesta

99

Usted puede utilizar el método SimpleXMLElement::asXML() de 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(); 
+12

'$ string = $ xml-> child -> __ toString();' –

+0

htmlspecialchars ($ xml-> asXML())? – zloctb

+0

pero te quedan las etiquetas, ¿y si no quieres las etiquetas? otras respuestas resuelven este problema – Andrew

12

Usted puede utilizar 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(); 
?> 
13

En realidad asXML() convierte la cadena en XML como su nombre lo dice:

<id>5</id> 

Esto se mostrará normalmente en una página web, pero lo hará causa problemas cuando se combinan los valores con otra cosa.

Es posible utilizar strip_tags funcionan para obtener el valor real del campo como:

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

PD: si se está trabajando con números enteros o flotantes, es necesario convertirlo en número entero con intval() o floatval().

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

Puede utilizar la fundición:

<?php 

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

$text = (string)$xml->child; 

$ texto será 'Hola mundo'

+2

Funciona para mí porque no pone las etiquetas, gracias – Andrew

5

Puede utilizar ->child para obtener un elemento hijo llamado niño.

Este elemento contendrá el texto del elemento niño elemento.

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

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

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

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

4

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 
0

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

Probablemente dependiendo de la alimentación xml puede que necesite/no necesite usar __toString(); Tuve que usar __toString(), de lo contrario, devolvería la cadena dentro de un SimpleXMLElement. Tal vez deba profundizar en el objeto ...