2010-09-11 9 views
71

Gibt es irgendeine Funktion, die den String von PHP simpleXMLElement erzeugt?SimpleXml to string

+4

Welche Art von String möchten Sie? –

Antwort

99

können Sie die SimpleXMLElement::asXML() Methode verwenden, um dies zu erreichen:

$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-> Kind -> __ toString();' –

+0

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

+0

aber yo sind mit den Tags, was ist, wenn Sie die Tags nicht wollen? andere Antworten lösen dieses Problem – Andrew

12

Sie die asXML Methode verwenden können, wie:

<?php 

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

// make any changes. 
.... 

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

Eigentlich asXML() den String in XML konvertiert, wie es Name schon sagt:

<id>5</id> 

Dies wird normalerweise auf einer Webseite angezeigt, aber es wird Probleme verursachen, wenn Sie Werte mit etwas anderem vergleichen.

Sie können strip_tags-Funktion verwenden, wie realen Wert des Feldes zu erhalten:

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

PS: Wenn Sie mit ganzen Zahlen oder Gleitkommazahlen arbeiten, müssen Sie es in integer konvertieren mit intval() oder floatval().

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

Sie können Casting verwenden:

<?php 

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

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

$ Text wird 'Hallo Welt'

+2

Funktioniert für mich, weil es die Tags nicht setzt, danke – Andrew

5

Sie können ->child verwenden, um ein untergeordnetes Element Kind genannt zu bekommen.

Dieses Element enthält den Text des Elements Kind.

Aber wenn Sie versuchen var_dump() für diese Variable, werden Sie sehen, es ist nicht wirklich eine PHP-Zeichenfolge.

Der einfachste Weg ist strval(xml->child); Das wird es in eine tatsächliche PHP-Zeichenfolge konvertieren.

Dies ist nützlich beim Debuggen, wenn Sie Ihre XML-Datei loopen und var_dump() verwenden, um das Ergebnis zu überprüfen.

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

4

Hier ist eine Funktion, die ich geschrieben habe, um dieses Problem zu lösen (vorausgesetzt, Tag hat keine Attribute). Diese Funktion wird HTML-Formatierung in dem Knoten behalten:

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

Dies ist ein alter Beitrag, aber meine Ergebnisse könnten jemandem helfen.

Wahrscheinlich abhängig von der XML-Feed Sie müssen/müssen möglicherweise nicht __toString(); Ich musste den __toString() verwenden, ansonsten gibt es den String in einem SimpleXMLElement zurück. Vielleicht muss ich das Objekt weiter aufreißen ...