2009-06-01 6 views
0

Je ne suis pas totalement nouveau en PHP ou en XML mais je suis 100% nouveau à parer XML avec PHP. J'ai une chaîne XML qui a plusieurs noeuds mais les seuls qui m'intéressent sont les noeuds <> dont il existe un nombre incertain contenant chacun une phrase comme ceci: < mot-clé> bijoux en diamant bleu </mot-clé> par exemple dire la chaîne ressemblait à ceci:PHP: Obtenir un tableau de texte à partir du type de nœud XML perticular?

<xml> 
<pointless_node/> 
<seq> 
<keyword>diamond ring</keyword> 
<keyword>ruby necklace</keyword> 
<keyword>mens watch</keyword> 
</seq> 
<some_node/> 
</xml> 

je ne voudrais un tableau comme celui-ci:

['diamond ring','ruby necklace','mens watch'] 

J'essayé de regarder le manuel PHP et juste se confondre et ne sais pas quoi faire. Quelqu'un peut-il s'il vous plaît me guider à travers comment faire cela? J'utilise PHP4.

MERCI!

Répondre

1

This turns $keywords into an array of Objects. Is there a way to get the text from the objects?

Bien sûr, voir.

$dom = domxml_open_mem($str); 
$keywords = $dom->get_elements_by_tagname('keyword'); 

foreach($keywords as $keyword) { 
    $text = $keyword->get_content(); 
    // Whatever 
} 
+0

J'apprécie vraiment que vous preniez le temps de répondre à mes questions, malheureusement dans le code que vous avez posté $ text == 'Objet' pas le texte dans les balises. –

+0

Mon mauvais, utiliser $ text = $ keyword-> get_content(); –

+0

Oui ça a marché! Merci! –

0

voir: http://www.php.net/simplexml-element-xpath Essayez la XPath suivante et la construction du tableau

$string = "<xml> 
<pointless_node/> 
<seq> 
<keyword>diamond ring</keyword> 
<keyword>ruby necklace</keyword> 
<keyword>mens watch</keyword> 
</seq> 
<some_node/> 
</xml>"; 

$xml = domxml_open_mem($xmlstr) 

$xpath = $xml->xpath_new_context(); 
$result = xpath_eval($xpath,'//keyword'); 

foreach ($result->nodeset as $node) 
{ 
    $result[] = $node->dump_node($node); 
} 

modifier: code modifié pour refléter php 4 exigences modifier: modifié pour tenir compte du comportement mal documenté de xpath_new_context (php docs commentaires Soulignez les erreur)

+1

Le simplexml n'est-il pas réservé aux versions php> 5? – Silfverstrom

+0

J'utiliserais même '// keyword/text()' xpath –

+0

ah ... * vérifie docs * tout à fait à droite .... retour à la planche à dessin. –

0

Je pense que le plus simple est:

$dom = domxml_open_mem($str); 
$keywords = $dom->get_elements_by_tagname('keyword'); 
+0

Cela transforme $ keywords en un tableau d'objets. Y a-t-il un moyen d'obtenir le texte des objets? –