2010-02-15 11 views
0

J'essaie d'obtenir du texte entre 2 balises html, seule la difficulté est que la balise peut différer de son nom.Obtenir du texte entre les balises complexes en PHP

Je vais vous expliquer dans le détail:

<icon displayid="62115">inv_helmet_130</icon> 

je dois obtenir le

inv_helmet_130

Mais le DisplayID de la balise peuvent différer, des idées sur la comment résoudre ceci? Peut-être avec une explication régulière, mais je ne suis pas bon à ceux-là.

Merci d'avance.

+1

Il semble que vous essayiez d'analyser XML. Avez-vous considéré un analyseur XML? –

+1

diffèrent? Donc, si ce n'est pas "62115", alors vous ne voulez pas obtenir les données? – ghostdog74

Répondre

3

Simple HTML DOM Parse r doit être capable de gérer que:

$html = file_get_html('http://www.example.com/'); 

foreach($html->find('icon') as $element) 
     echo $element->innertext . '<br>'; 

Vous pouvez les simples comme ceci:

echo $html->find('icon', 0)->innertext; // get me the first 
+0

Merci cela a fait l'affaire! –

+0

merci. cela marche. :) – apis17

1

Ne pas utiliser une expressions régulières pour traiter le HTML.

Utilisez plutôt quelque chose spécialement conçu pour XML/HTML comme XPath. Il fait déjà partie de PHP's libraries.

L'expression XPath que vous voulez va à quelque chose le long des lignes de cela,

//icon/text() 

qui se lit, « Sélectionnez le texte à partir d'un élément icon dans le document, quel que soit son identité ou les parents. »

+0

Merci, je pense que je peux le faire fonctionner avec ça. –

0

Depuis <icon> n'est pas une balise HTML valide, je suppose que vous travaillez avec XML ou un autre langage de balisage. PHP a une extension très pratique pour traiter XML:

<?php 

$xml = simplexml_load_string('<?xml version="1.0"?><icon displayid="62115">inv_helmet_130</icon>'); 
echo (string)$xml[0]; 

?> 

Le code exact, bien sûr, dépend de votre chaîne exacte. Comme suggéré, une recherche xpath peut faire l'affaire.