Existe-t-il une fonction qui crée une chaîne à partir de PHP SimpleXMLElement
?
Vous pouvez utiliser la méthode SimpleXMLElement::asXML()
pour accomplir ceci:
$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();
Vous pouvez utiliser le casting:
<?php
$string = "<element><child>Hello World</child></element>";
$xml = new SimpleXMLElement($string);
$text = (string)$xml->child;
Le texte $ sera 'Hello World'
En réalité, asXML () convertit la chaîne en xml comme son nom l'indique:
<id>5</id>
Cela s'affichera normalement sur une page Web, mais cela posera des problèmes si vous faites correspondre des valeurs avec autre chose.
Vous pouvez utiliser la fonction strip_tags pour obtenir une valeur réelle du champ comme:
$newString = strip_tags($xml->asXML());
PS: si vous travaillez avec des nombres entiers ou flottants, vous devez le convertir en entier avec intval () ou floatval () .
$newNumber = intval(strip_tags($xml->asXML()));
Vous pouvez utiliser la méthode asXML
comme:
<?php
// string to SimpleXMLElement
$xml = new SimpleXMLElement($string);
// make any changes.
....
// convert the SimpleXMLElement back to string.
$newString = $xml->asXML();
?>
Vous pouvez utiliser ->child
pour obtenir un élément enfant nommé child .
Cet élément contiendra le texte de l’élément child .
Mais si vous essayez var_dump()
avec cette variable, vous verrez que ce n'est pas en réalité une chaîne PHP.
La solution la plus simple consiste à exécuter une strval(xml->child);
Elle sera convertie en une chaîne réelle PHP.
Ceci est utile lors du débogage lors de la mise en boucle de votre XML et de l'utilisation de var_dump()
pour vérifier le résultat.
Donc, $s = strval($xml->child);
.
Voici une fonction que j'ai écrite pour résoudre ce problème (en supposant que la balise n'a pas d'attribut). Cette fonction gardera le formatage HTML dans le noeud:
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
Parfois, vous pouvez simplement dactylographier:
// this is the value of my $xml
object(SimpleXMLElement)#10227 (1) {
[0]=>
string(2) "en"
}
$s = (string) $xml; // returns "en";
Ceci est un ancien post, mais mes découvertes pourraient aider quelqu'un.
Probablement en fonction du flux XML, il se peut que vous n’ayez pas besoin d’utiliser __toString (); J'ai dû utiliser __toString (), sinon la chaîne est renvoyée dans un SimpleXMLElement. Peut-être dois-je approfondir l'objet plus loin ...