SimpleXml zum String

79

Gibt es eine Funktion, die einen String aus PHP macht SimpleXMLElement?

liysd
quelle
4
Was für eine Saite willst du?
Shamim Hafiz

Antworten:

120

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();
Tim Cooper
quelle
19
$string = $xml->child->__toString();
Luke Snowden
htmlspecialchars ($ xml-> asXML ())?
Zloctb
1
Aber du hast die Tags übrig. Was ist, wenn du die Tags nicht willst? andere Antworten lösen dieses Problem
Andrew
62

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

Nicolay77
quelle
2
Funktioniert für mich, weil es die Tags nicht
Andrew
16

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:

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

PS: Wenn Sie mit Ganzzahlen oder gleitenden Zahlen arbeiten, müssen Sie diese mit intval () oder floatval () in eine Ganzzahl konvertieren .

$newNumber = intval(strip_tags($xml->asXML()));
Tolginho
quelle
15

Sie können die asXMLMethode wie folgt verwenden:

<?php

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

// make any changes.
....

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

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.

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

Leander
quelle
4

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
Paralaks
quelle
1

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";
Luca Reghellin
quelle
2
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 ...

Keenan Stewart
quelle