2010-09-11 14 views

risposta

99

È possibile utilizzare il metodo SimpleXMLElement::asXML() per raggiungere questo obiettivo:

$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

'$ stringa = $ xml-> figlio -> __ toString();' –

+0

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

+0

ma ti rimangono i tag, cosa succede se non vuoi i tag? altre risposte risolvono questo problema – Andrew

12

È possibile utilizzare il metodo asXML come:

<?php 

// string to SimpleXMLElement 
$xml = new SimpleXMLElement($string); 

// make any changes. 
.... 

// convert the SimpleXMLElement back to string. 
$newString = $xml->asXML(); 
?> 
13

realtà asXml() converte la stringa in XML come nome dice:

<id>5</id> 

Questo verrà visualizzato normalmente su una pagina Web ma sarà causare problemi quando si corrispondono valori con qualcos'altro.

È possibile utilizzare strip_tags funzione per ottenere il valore reale del campo, come:

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

PS: se si lavora con numeri interi o numeri di galleggiamento, è necessario convertirlo in intero con intval() oppure floatval().

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

È possibile utilizzare casting:

<?php 

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

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

$ testo sarà 'Ciao Mondo'

+2

Funziona per me perché non inserisce i tag, grazie – Andrew

5

È possibile utilizzare ->child per ottenere un elemento figlio di nome bambino.

Questo elemento conterrà il testo dell'elemento figlio.

Ma se si prova var_dump() su quella variabile, si vedrà che non è in realtà una stringa PHP.

Il modo più semplice per farlo è eseguire un strval(xml->child); che lo convertirà in una vera stringa PHP.

Questo è utile quando si esegue il debug durante il looping dell'XML e si utilizza var_dump() per verificare il risultato.

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

4

Ecco una funzione che ho scritto per risolvere questo problema (supponendo che il tag non abbia attributi). Questa funzione di tenere la formattazione HTML nel 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

Si tratta di un vecchio post, ma i miei risultati potrebbero aiutare qualcuno.

Probabilmente a seconda del feed xml potrebbe/non può essere necessario utilizzare __toString(); Ho dovuto usare __toString() altrimenti restituisce la stringa all'interno di SimpleXMLElement. Forse ho bisogno di approfondire ulteriormente l'oggetto ...

Problemi correlati