Skip White
Skip White

Reputation: 31

Error loading xml in php (not absolute)

I am trying tom load an XML document with multiple namespace declarations My php is:

<?php 
$doc = new DOMDocument('1.0','UTF-8'); 
$doc->load( 'UBLCatalog.xml' ); 

$Items = $doc->getElementsByTagNameNS( "UBLCommonAggregateComponents","Item" ); 
foreach( $Items as $Item ) 
{ 
 $descriptions = $Item->getElementsByTagNameNS( "UBLCommonBasicComponents","Description" ); 
 $description = $descriptions->item(0)->nodeValue;  

 echo "<b>$description\n</b><br>"; 
 } 
?> 

The error is:

xmlns: URI UBLCatalogDocument is not absolute in file:///C:/wamp/www/XMLExperiments/UBLCatalog.xml,

I am getting output, but the error is annoying.

The verbatim error is: Notice: DOMDocument::load() [domdocument.load]: xmlns: URI UBLCatalogDocument is not absolute in file:///C:/wamp/www/XMLExperiments/UBLCatalog.xml, line: 4 in C:\wamp\www\XMLExperiments\ItemsXml.php on line 3

And, if I remove the default namespace (xmlns="UBLCatalogDocument") the error goes away

Upvotes: 3

Views: 5849

Answers (2)

pulzarraider
pulzarraider

Reputation: 2317

PHP XML extenstions (DOM, XMLReader, SimpleXml etc.) use libxml library to parse XML files.

The reason of this error is that libxml expects absolute URL in xmlns atttibute (i.e. xmlns="http://example.com/some-unique-url"), but gets only text (xmlns="UBLCatalogDocument").

From the libxml webpage:

The namespace value has to be an absolute URL, but the URL doesn't have to point to any existing resource on the Web.

So if it's possible, change your xmlns attribute to some absolute URL.

Upvotes: 3

Matthew
Matthew

Reputation: 146

Finding your nodes using XPath might get rid of your error:

$xpath = new DOMXpath($doc);
$Items = $xpath->query('//item[@xmlns="UBLCommonAggregateComponents"]');

Upvotes: 1

Related Questions