I am trying to parse the the following xml code below, I need to retrieve only totalhits="376719" in the "resultset_web" child.

I also need to use code similar to the following:

<?php
$doc = DOMDocument::loadXML($information);
$result_node = $doc->getElementsByTagName('resultset_web');
$tHits = $result_node->item(0)->getAttribute('totalhits); 
?>

/* XML TO BE PARSED */

$information = '<ysearchresponse responsecode="200">
<prevpage>
/ysearch/web/v1/sunflower%20seeds?appid=e4j0dGfIkY0.VnPaj_m8JivWDmAdWAV50uTRuIaqvA--&format=xml&count=1&start=0
</prevpage>
<nextpage>
/ysearch/web/v1/sunflower%20seeds?appid=e4j0dGfIkY0.VnPaj_m8JivWDmAdWAV50uTRuIaqvA--&format=xml&count=1&start=2
</nextpage>
<resultset_web count="1" start="1" totalhits="376055" deephits="11600000"><result>
<abstract>
Home to the <b>seed</b> brand featuring products, nutrition facts, and more.
</abstract>
<clickurl>
http://lrd.yahooapis.com/_ylc=X3oDMTRrYzhoc210BF9TAzIwMjMxNTI3MDIEYXBwaWQDZTRqMGRHZklrWTAuVm5QYWpfbThKaXZXRG1BZFdBVjUwdVRSdUlhcXZBLS0EcG9zAzEEc2VydmljZQNZU2VhcmNoV2ViBHNsawN0aXRsZQRzcmNwdmlkA2ZIUnh2RVBEQjJHQjIxOF9zZjhLc3dsa1RNTzJsa21qWS5FQUE2WkI-/SIG=10v00dabm/**http%3A//www.davidseeds.com/
</clickurl>
<date>2008/12/12</date>
<dispurl>www.<b>davidseeds.com</b></dispurl>
<size>7122</size>
<title>David <b>Sunflower</b> <b>Seeds</b></title>
<url>http://www.davidseeds.com/</url>
</result>
</resultset_web>
</ysearchresponse>'

Recommended Answers

All 3 Replies

<?php

$xYahooXML = '
<ysearchresponse responsecode="200">
	<prevpage> /ysearch/web/v1/sunflower%20seeds?appid=e4j0dGfIkY0.VnPaj_m8JivWDmAdWAV50uTRuIaqvA--&amp;format=xml&amp;count=1&amp;start=0 </prevpage>
	<nextpage> /ysearch/web/v1/sunflower%20seeds?appid=e4j0dGfIkY0.VnPaj_m8JivWDmAdWAV50uTRuIaqvA--&amp;format=xml&amp;count=1&amp;start=2 </nextpage>
	<resultset_web count="1" start="1" totalhits="376055" deephits="11600000">
		<result>
			<abstract> Home to the <b>seed</b> brand featuring products, nutrition facts, and more. </abstract>
			<clickurl> http://lrd.yahooapis.com/_ylc=X3oDMTRrYzhoc210BF9TAzIwMjMxNTI3MDIEYXBwaWQDZTRqMGRHZklrWTAuVm5QYWpfbThKaXZXRG1BZFdBVjUwdVRSdUlhcXZBLS0EcG9zAzEEc2VydmljZQNZU2VhcmNoV2ViBHNsawN0aXRsZQRzcmNwdmlkA2ZIUnh2RVBEQjJHQjIxOF9zZjhLc3dsa1RNTzJsa21qWS5FQUE2WkI-/SIG=10v00dabm/**http%3A//www.davidseeds.com/ </clickurl>
			<date>2008/12/12</date>
			<dispurl>www.<b>davidseeds.com</b></dispurl>
			<size>7122</size>
			<title>David <b>Sunflower</b> <b>Seeds</b></title>
			<url>http://www.davidseeds.com/</url>
		</result>
	</resultset_web>
</ysearchresponse>';

$oSimpleXML = new SimpleXMLElement( $xYahooXML );
echo $oSimpleXML->resultset_web->attributes()->totalhits;

First, I used SimpleXML as it is generally easier to parse this kind of xml with.

Second, I don't know if the DOM will complain about this, but to my knowledge for XML to be valid a node can not contain an html entity that is not in entity format aka & => &amp; Also, besides 5 entities quot, amp, apos, lt, gt any other element has to be numerically defined. http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references
I had to change the &'s to &amp; in the url's in your code to get SimpleXML to not complain about it being invalid xml etc.

Let me know if you have any additional questions.

commented: nice info! +10
commented: Fast problem solver! Cheers! +1

Your method worked perfectly, but like you said, after converting everything "&" to "&amp;" etc... I will wait till early tomorrow see if anyone else posts an answer to "parsing" using DOM. Reason being this will be dynamic code being plugged in and it needs work without any conversion.

It turns out that the my initial code was working, but where the problem occurred was I forgot to add "<?xml version="1.0" encoding="utf-8"?>" to the beginning of the "$information" value.

Another mistake was I doing was not using a valid XML example. Solution for my inititial question. 3 Working Solutions Below!!

$information = '<?xml version="1.0" encoding="utf-8"?>
<ysearchresponse xmlns="http://www.inktomi.com/" responsecode="200">
  <prevpage><![CDATA[/ysearch/web/v1/sunflower%20seeds?appid=e4j0dGfIkY0.VnPaj_m8JivWDmAdWAV50uTRuIaqvA--&format=xml&count=1&start=0]]></prevpage>
  <nextpage><![CDATA[/ysearch/web/v1/sunflower%20seeds?appid=e4j0dGfIkY0.VnPaj_m8JivWDmAdWAV50uTRuIaqvA--&format=xml&count=1&start=2]]></nextpage>
  <resultset_web count="1" start="1" totalhits="395561" deephits="12200000">
    <result>
      <abstract><![CDATA[Home to the <b>seed</b> brand featuring products, nutrition facts, and more.]]></abstract>
      <clickurl>http://lrd.yahooapis.com/_ylc=X3oDMTRrOXJuZjk2BF9TAzIwMjMxNTI3MDIEYXBwaWQDZTRqMGRHZklrWTAuVm5QYWpfbThKaXZXRG1BZFdBVjUwdVRSdUlhcXZBLS0EcG9zAzEEc2VydmljZQNZU2VhcmNoV2ViBHNsawN0aXRsZQRzcmNwdmlkAzNuZzJiMFBEQjJIMl85N2RIXzZiUWdLMVF3cE1Xa21sV1NVQUJXamI-/SIG=10v00dabm/**http%3A//www.davidseeds.com/</clickurl>
      <date>2008/12/12</date>

      <dispurl><![CDATA[www.<b>davidseeds.com</b>]]></dispurl>
      <size>7122</size>
      <title><![CDATA[David <b>Sunflower</b> <b>Seeds</b>]]></title>
      <url>http://www.davidseeds.com/</url>
    </result>
  </resultset_web>
</ysearchresponse>';

ALL THE BELOW WILL WORK
==================
SOLUTION 1

<?php
$doc = new DOMDocument;
$doc->loadXML($information);
$result_node = $doc->getElementsByTagName('resultset_web');
$tHits = $result_node->item(0)->getAttribute('totalhits');
?>

SOLUTION 2

<?php $doc = DOMDocument::loadXML($information);
$result_node = $doc->getElementsByTagName('resultset_web');
$tHits = $result_node->item(0)->getAttribute('totalhits');
?>

SOLUTION 3 (SimpleXML) by mschroeder

<?php $oSimpleXML = new SimpleXMLElement( $information);
echo $oSimpleXML->resultset_web->attributes()->totalhits;
?>
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.