$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();
?>
Sie können ->childein untergeordnetes Element mit dem Namen child abrufen .
Dieses Element enthält den Text des untergeordneten Elements.
Wenn Sie var_dump()diese Variable jedoch anprobieren , werden Sie feststellen, dass es sich nicht um eine PHP-Zeichenfolge handelt.
Der einfachste Weg, dies zu umgehen, besteht darin, ein strval(xml->child);
That auszuführen , das es in eine tatsächliche PHP-Zeichenfolge konvertiert.
Dies ist nützlich beim Debuggen, wenn Sie Ihr XML schleifen und var_dump()das Ergebnis überprüfen.
Hier ist eine Funktion, die ich geschrieben habe, um dieses Problem zu lösen (vorausgesetzt, das Tag hat keine Attribute). Diese Funktion behält die HTML-Formatierung im Knoten bei:
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
Dies ist die Art von Objekt, die Sie für das Beschreibungsfeld eines RSS-Feeds erhalten. Es ist nicht intuitiv, dass es funktioniert, aber es war die einzige Lösung hier, die mir den String im Inneren gab $xmlitem->description. Vielen Dank.
Henrik Erlandsson
0
Wahrscheinlich in Abhängigkeit von der XML - Feed Sie können / nicht Gebrauch benötigt __toString(); Ich musste das verwenden, __toString()sonst wird die Zeichenfolge in einem SimpleXMLElement zurückgegeben. Vielleicht muss ich das Objekt weiter aufschlüsseln ...
Antworten:
Sie können 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();
quelle
$string = $xml->child->__toString();
Sie können Casting verwenden:
<?php $string = "<element><child>Hello World</child></element>"; $xml = new SimpleXMLElement($string); $text = (string)$xml->child;
$ text wird 'Hello World' sein
quelle
Tatsächlich konvertiert asXML () die Zeichenfolge in XML, wie der Name schon sagt:
<id>5</id>
Dies wird normalerweise auf einer Webseite angezeigt, verursacht jedoch Probleme, wenn Sie Werte mit etwas anderem abgleichen.
Sie können die Funktion strip_tags verwenden, um den tatsächlichen Wert des Felds zu ermitteln:
PS: Wenn Sie mit Ganzzahlen oder gleitenden Zahlen arbeiten, müssen Sie diese mit intval () oder floatval () in eine Ganzzahl konvertieren .
quelle
Sie können die
asXML
Methode wie folgt verwenden:<?php // string to SimpleXMLElement $xml = new SimpleXMLElement($string); // make any changes. .... // convert the SimpleXMLElement back to string. $newString = $xml->asXML(); ?>
quelle
Sie können
->child
ein untergeordnetes Element mit dem Namen child abrufen .Dieses Element enthält den Text des untergeordneten Elements.
Wenn Sie
var_dump()
diese Variable jedoch anprobieren , werden Sie feststellen, dass es sich nicht um eine PHP-Zeichenfolge handelt.Der einfachste Weg, dies zu umgehen, besteht darin, ein
strval(xml->child);
That auszuführen , das es in eine tatsächliche PHP-Zeichenfolge konvertiert.Dies ist nützlich beim Debuggen, wenn Sie Ihr XML schleifen und
var_dump()
das Ergebnis überprüfen.Also
$s = strval($xml->child);
.quelle
Hier ist eine Funktion, die ich geschrieben habe, um dieses Problem zu lösen (vorausgesetzt, das Tag hat keine Attribute). Diese Funktion behält die HTML-Formatierung im Knoten bei:
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
quelle
Manchmal kann man einfach tippen:
// this is the value of my $xml object(SimpleXMLElement)#10227 (1) { [0]=> string(2) "en" } $s = (string) $xml; // returns "en";
quelle
$xmlitem->description
. Vielen Dank.Wahrscheinlich in Abhängigkeit von der XML - Feed Sie können / nicht Gebrauch benötigt
__toString()
; Ich musste das verwenden,__toString()
sonst wird die Zeichenfolge in einem SimpleXMLElement zurückgegeben. Vielleicht muss ich das Objekt weiter aufschlüsseln ...quelle