views:

373

answers:

4

hi, i get the html from another site with file_get_contens, my question is how can i get a specific tag value?

let's say i have:

<div id="global"><p class="paragraph">1800</p></div>

how can i get paragraph's value? thanks

+3  A: 

If the example is really that trivial you could just use a regular expression. For generic HTML parsing though, PHP has DOM support:

$dom = new domDocument();
$dom->loadHTML("<div id=\"global\"><p class=\"paragraph\">1800</p></div>");
echo $dom->getElementsByTagName('p')->item(0)->nodeValue;
Michael Mrozek
and if i want to get elements by class name?
kmunky
I don't think there's a method for that, DOMs usually don't have it, you need to loop over the nodes and check each one. http://php.net/manual/en/class.domdocument.php
Michael Mrozek
A: 
$input  = '<div id="global"><p class="paragraph">1800</p></div>';
$output = strip_tags($input);
hsz
He wants to use `file_get_contents()` and that example he gave was what could be found in the example website.
Christopher Richa
I know. But what if his website has only one `<div>` with one value ? :)
hsz
A: 
preg_match_all('#paragraph">(.*?)<#is', $input, $output);

print_r($output);

Untested.

Tim Green
+1  A: 

You need to parse the HTML. There are several ways to do this, including using PHP's XML parsing functions.

However, if it is just a simple value (as you asked above) I would use the following simple code:

// your content
$contents='<div id="global"><p class="paragraph">1800</p></div>';

// define start and end position
$start='<div id="global"><p class="paragraph">';
$end='</p></div>';

// find the stuff
$contents=substr($contents,strpos($contents,$start)+strlen($start));
$contents=substr($contents,0,strpos($contents,$end));

// write output
echo $contents;

Best of luck!

Christian Sciberras

(tested and works)

Christian Sciberras
I would recommend using Michael Mrozek's answer if you want more flexibility.However, I would discourage the use of RegExp especially in this context:[1] They are slower compared to simple traditional methods.[2] They are harder to maintain.[3] They imply you knowing them which is probably not something you would want to spend a lot of time on.
Christian Sciberras