76 votes

Forcer un Objet SimpleXML à une chaîne, quel que soit le contexte

Disons que j'ai un peu de XML comme ceci

<channel>
  <item>
    <title>This is title 1</title>
  </item>
</channel>

Le code ci-dessous est ce que je veux en ce qu'elle renvoie le titre comme une chaîne de caractères

$xml = simplexml_load_string($xmlstring);
echo $xml->channel->item->title;

Voici mon problème. Le code ci-dessous ne permet pas de traiter le titre comme une chaîne de caractères dans ce contexte donc je me retrouve avec un objet SimpleXML dans le tableau au lieu d'une chaîne.

$foo = array( $xml->channel->item->title );

J'ai travaillé autour d'elle comme ça

$foo = array( sprintf("%s",$xml->channel->item->title) );

mais qui semble laid.

Quel est le meilleur moyen de forcer un objet SimpleXML à une chaîne, quel que soit le contexte?

144voto

Aron Rotteveel Points 27894

Transtypage de la SimpleXMLObject à une chaîne de caractères:

$foo = array( (string) $xml->channel->item->title );

Le code ci-dessus appelle en interne __toString() sur le SimpleXMLObject. Cette méthode n'est pas disponible publiquement, car il interfère avec le schéma de mise en correspondance de la SimpleXMLObject, mais il peut encore être invoquée dans la manière ci-dessus.

20voto

Zaje Points 1233

Vous pouvez utiliser la fonction PHP

strval();

Cette fonction retourne la chaîne de valeurs du paramètre transmis.

9voto

size_t Points 41

Il est originaire de SimpleXML méthode SimpleXMLElement::asXML Selon le paramètre de l'écriture SimpleXMLElement de xml 1.0 fichier ou tout simplement pour une chaîne de caractères:

$xml = new SimpleXMLElement($string);
$validfilename = '/temp/mylist.xml';
$xml->asXML($validfilename);    // to a file
echo $xml->asXML();             // to a string

3voto

Mikepote Points 798

Un autre laid façon de le faire:

$foo = array( $xml->channel->item->title."" );

Cela fonctionne, mais il n'est pas assez.

1voto

Pete Points 16

Pour obtenir des données XML dans un tableau php pour ce faire:

// 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 childs enfant, puis il suffit de faire 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 étendre $xml-> à travers chaque niveau jusqu'à ce que vous obtenez ce que vous voulez Vous pouvez aussi mettre tous les nœuds dans un tableau sans les niveaux ou juste au sujet de toute autre manière que vous le souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X