0

I am kinda new in xml parsing, I am trying to figure out what is wrong with this piece of code why is it refusing to display any result?

//php code
 $file=file_get_contents("http://".$_SERVER["HTTP_HOST"]."/sitemap.xml");
 $dom = new DOMDocument();
 $dom->loadXML($file);
 $xmlPath = new DOMXPath($dom);
 $arrNodes = $xmlPath->query('//loc');
 foreach($arrNodes as $arrNode){
 echo $arrNode->nodeValue;
 }

//sitemap.xml
 <url>
 <loc>http://calculosophia.com/</loc>
 </url>
 <url>
 <loc>http://calculosophia.com/finance/compound-interest-calculator</loc>
 </url>

I can see that the file is getting retrieved successfully but when var dumping $arrNodes it gives me object(DOMNodeList)[170] I dunno what to do further

asked Dec 29, 2014 at 21:09
12
  • can you please explain why -1 ? Commented Dec 29, 2014 at 21:11
  • Change $arrNode->item(0)->nodeValue to $arrNode->nodeValue Commented Dec 29, 2014 at 21:13
  • @RocketHazmat still nothing Commented Dec 29, 2014 at 21:14
  • What do you see if you do var_dump($arrNode) inside the loop? Commented Dec 29, 2014 at 21:15
  • 1
    I see your issue. Your XML file is invalid. There's no root node. Is what you've posted here the entirety of your XML file? Commented Dec 29, 2014 at 21:18

1 Answer 1

2
$arrNodes = $xmlPath->query('//loc');

This line is returning you a DOMNodeList containing 0 elements. That's because the root element (<urlset>) is declaring a namespace (the xmlns attribute). XPath needs to know about this namespace before you can use it to query the file.

$xmlPath = new DOMXPath($dom);
// The 1st parameter is just name, it can be whatever you want
// The 2nd parameter is the namespace URL (the value of the "xmlns" attribute)
$xmlPath->registerNamespace('sitemap', 'http://www.sitemaps.org/schemas/sitemap/0.9');
$arrNodes = $xmlPath->query('//sitemap:loc');
answered Dec 29, 2014 at 21:41
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks it works! I am old in PHP and this thing would never come to my mind though I don't know why they -1 me ? is it kinda of stupid ?

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.