Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 252
Skip White Avatar asked Sep 21 '26 17:09

Skip White


2 Answers

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.

like image 115
pulzarraider Avatar answered Sep 23 '26 07:09

pulzarraider


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

$xpath = new DOMXpath($doc);
$Items = $xpath->query('//item[@xmlns="UBLCommonAggregateComponents"]');
like image 20
Matthew Avatar answered Sep 23 '26 09:09

Matthew