SimpleXml in Zeichenfolge

Lesezeit: 3 Minuten

Benutzer-Avatar
lysd

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

  • Was für eine Saite willst du?

    – Shamim Hafiz – MSFT

    11. September 2010 um 12:18 Uhr

Benutzer-Avatar
Tim Cooper

Du kannst den … benutzen SimpleXMLElement::asXML() Methode, 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();

  • $string = $xml->child->__toString();

    – Lukas Snowden

    27. Januar 2015 um 22:17 Uhr

  • htmlspecialchars( $xml->asXML() ) ?

    – zloctb

    24. Oktober 2015 um 5:19 Uhr

  • aber Sie haben die Tags übrig, was ist, wenn Sie die Tags nicht wollen? andere Antworten lösen dieses Problem

    – Andreas

    26. Januar 2016 um 20:46 Uhr

  • Verwenden Sie nicht die Methode von @LukeSnowden, da diese nicht direkt aufgerufen werden soll. Die eigentlich richtige Antwort ist die Antwort von Nicolay77, die Casting verwendet.

    – Benutzer2924019

    15. Februar um 16:45 Uhr

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

  • Funktioniert für mich, weil es die Tags nicht einfügt, danke

    – Andreas

    26. Januar 2016 um 20:47 Uhr

Du kannst den … benutzen asXML Methode als:

<?php

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

// make any changes.
....

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

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 etwas anderem abgleichen.

Sie können die Funktion strip_tags verwenden, um den tatsächlichen Wert des Felds zu erhalten, wie:

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

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

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

Benutzer-Avatar
Leander

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

Dieses Element enthält den Text der Kind Element.

Aber wenn du es versuchst var_dump() Bei dieser Variablen werden Sie sehen, dass es sich nicht wirklich um einen PHP-String handelt.

Der einfachste Weg, dies zu umgehen, besteht darin, a auszuführen strval(xml->child);
Dadurch wird es in einen tatsächlichen PHP-String konvertiert.

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

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

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

Benutzer-Avatar
Luca Reghellin

Manchmal können Sie einfach typisieren:

// this is the value of my $xml
object(SimpleXMLElement)#10227 (1) {
  [0]=>
  string(2) "en"
}

$s = (string) $xml; // returns "en";

  • Dies ist die Art von Objekt, das 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 die Zeichenfolge im Inneren gab $xmlitem->description. Vielen Dank.

    – Henrik Erlandsson

    8. August 2019 um 9:12 Uhr

1353200cookie-checkSimpleXml in Zeichenfolge

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy