Alligator
Alligator

Reputation: 730

How do I parse an XML file with SimpleXMLElement and multiple namespaces?

I have an XML file that looks like the example on this site: http://msdn.microsoft.com/en-us/library/ee223815(v=sql.105).aspx

I am trying to parse the XML file using something like this:

$data = file_get_contents('http://mywebsite here');
$xml = new SimpleXMLElement($data);
$str = $xml->Author;
echo $str;

Unfortunately, this is not working, and I suspect it is due to the namespaces. I can dump the $xml using asXML() and it correctly shows the XML data.

I understand I need to insert namespaces somehow, but I'm not sure how. How do I parse this type of XML file?

Upvotes: 0

Views: 240

Answers (1)

Baba
Baba

Reputation: 95101

All you need is to register the namespace

$sxe = new SimpleXMLElement($data);
$sxe->registerXPathNamespace("diffgr", "urn:schemas-microsoft-com:xml-diffgram-v1");
$data = $sxe->xpath("//diffgr:diffgram") ;
$data = $data[0];
echo "<pre>";
foreach($data->Results->RelevantResults as $result)
{
    echo $result->Author , PHP_EOL ;
}

Output

Ms.Kim    Abercrombie
Mr.GustavoAchong
Mr. Samuel N. Agcaoili

See Full code In Action

Upvotes: 3

Related Questions