Disons que j'ai du XML comme celui-ci
<channel>
<item>
<title>This is title 1</title>
</item>
</channel>
Le code ci-dessous fait ce que je veux car il affiche le titre sous forme de chaîne.
$xml = simplexml_load_string($xmlstring);
echo $xml->channel->item->title;
Voici mon problème. Le code ci-dessous ne traite pas le titre comme une chaîne dans ce contexte, je me retrouve donc avec un objet SimpleXML dans le tableau plutôt qu'une chaîne.
$foo = array( $xml->channel->item->title );
Je travaille comme ça
$foo = array( sprintf("%s",$xml->channel->item->title) );
mais cela semble moche.
Quel est le meilleur moyen de forcer un objet SimpleXML à une chaîne, quel que soit le contexte?
Typecast SimpleXMLObject en chaîne:
$foo = array( (string) $xml->channel->item->title );
Le code ci-dessus appelle en interne __toString()
sur SimpleXMLObject. Cette méthode n'est pas accessible au public, car elle interfère avec le schéma de mappage de SimpleXMLObject, mais elle peut toujours être invoquée de la manière ci-dessus.
Vous pouvez utiliser la fonction PHP
strval();
Cette fonction renvoie les valeurs de chaîne du paramètre qui lui est passé.
Il existe une méthode native SimpleXML SimpleXMLElement :: asXML Selon le paramètre, il écrit SimpleXMLElement dans un fichier xml 1.0 ou dans une chaîne:
$xml = new SimpleXMLElement($string);
$validfilename = '/temp/mylist.xml';
$xml->asXML($validfilename); // to a file
echo $xml->asXML(); // to a string
Une autre façon laide de le faire:
$foo = array( $xml->channel->item->title."" );
Cela fonctionne, mais ce n'est pas joli.
Pour obtenir des données XML dans un tableau php, procédez comme suit:
// this gets all the outer levels into an associative php array
$header = array();
foreach($xml->children() as $child)
{
$header[$child->getName()] = sprintf("%s", $child);
}
echo "<pre>\n";
print_r($header);
echo "</pre>";
Pour obtenir un enfant, faites simplement ceci:
$data = array();
foreach($xml->data->children() as $child)
{
$header[$child->getName()] = sprintf("%s", $child);
}
echo "<pre>\n";
print_r($data);
echo "</pre>";
Vous pouvez développer $ xml-> à travers chaque niveau jusqu'à ce que vous obteniez ce que vous souhaitez.
La réponse acceptée renvoie en fait un tableau contenant une chaîne, qui n'est pas exactement ce que l'OP a demandé (une chaîne) . Pour développer cette réponse, utilisez:
$foo = [ (string) $xml->channel->item->title ][0];
Ce qui retourne le seul élément du tableau, une chaîne.
Essayez strval ($ xml-> channel-> item-> title)
Il existe une méthode SimpleXML native SimpleXMLElement :: asXML En fonction du paramètre, elle écrit SimpleXMLElement dans un fichier XML 1.0, Oui
$get_file= read file from path;
$itrate1=$get_file->node;
$html = $itrate1->richcontent->html;
echo $itrate1->richcontent->html->body->asXML();
print_r((string) $itrate1->richcontent->html->body->asXML());
Je ne sais pas s'ils ont changé la visibilité de la méthode __toString()
depuis que la réponse acceptée a été écrite, mais pour l'instant, cela fonctionne bien pour moi:
var_dump($xml->channel->item->title->__toString());
SORTIE:
string(15) "This is title 1"