wake-up-neo.com

SimpleXml in Zeichenfolge

Gibt es eine Funktion, die String aus PHP SimpleXMLElement erstellt?

75
liysd

Sie können dazu die Methode SimpleXMLElement::asXML() verwenden:

$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();
110
Tim Cooper

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

56
Nicolay77

Tatsächlich konvertiert asXML () die Zeichenfolge in XML, wie der Name sagt:

<id>5</id>

Dies wird normalerweise auf einer Webseite angezeigt, verursacht jedoch Probleme, wenn Sie Werte mit anderen Werten abgleichen.

Sie können die Funktion strip_tags verwenden, um einen realen Wert des Felds zu erhalten, z.

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

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

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

Sie können die asXML -Methode folgendermaßen verwenden:

<?php

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

// make any changes.
....

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

Sie können ->child verwenden, um ein untergeordnetes Element mit dem Namen child zu erhalten.

Dieses Element enthält den Text des Elements child .

Wenn Sie jedoch var_dump() für diese Variable versuchen, werden Sie feststellen, dass es sich nicht um eine PHP - Zeichenfolge handelt.

Der einfachste Weg, dies zu erreichen, besteht darin, eine strval(xml->child);.__ auszuführen, die dann in einen tatsächlichen PHP - String umgewandelt wird.

Dies ist hilfreich beim Debuggen, wenn Sie Ihre XML-Schleife durchlaufen und das Ergebnis mit var_dump() überprüfen.

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

8
Leander

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
4
paralaks

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";
0
Luca Reghellin

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

Wahrscheinlich Abhängig vom XML-Feed können/müssen Sie __toString () nicht verwenden. Ich musste __toString () verwenden, andernfalls wird die Zeichenfolge in einem SimpleXMLElement zurückgegeben. Vielleicht muss ich das Objekt weiter aufreißen ...

0
Keenan Stewart