3

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

2
  • 1
    Can you share the XML format here for others to see. Would help in understanding the structure.
    – web-nomad
    Commented Jun 12, 2012 at 6:46
  • What line is causing this error? Commented Jun 12, 2012 at 18:29

2 Answers 2

3

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.

1

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

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.