在php中加载xml时出错(不是绝对的)

时间:2012-06-11 20:14:16

标签: php xml namespaces

我正在尝试使用多个名称空间声明来加载XML文档 我的php是:

<?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>"; 
 } 
?> 

错误是:

  

xmlns:URI UBLCatalogDocument不是绝对的   文件:/// C:/wamp/www/XMLExperiments/UBLCatalog.xml,

我正在输出,但错误很烦人。

逐字错误是:注意:DOMDocument :: load()[domdocument.load]:xmlns:URI UBLCatalogDocument在file:/// C:/wamp/www/XMLExperiments/UBLCatalog.xml中不是绝对的,行:第3行的C:\ wamp \ www \ XMLExperiments \ ItemsXml.php

并且,如果我删除默认命名空间(xmlns =“UBLCatalogDocument”),则错误消失

2 个答案:

答案 0 :(得分:2)

PHP XML扩展(DOM,XMLReader,SimpleXml等)use libxml library来解析XML文件。

此错误的原因是 libxml需要xmlns atttibute (即xmlns="http://example.com/some-unique-url")中的绝对网址,但只获取文字(xmlns="UBLCatalogDocument")。< / p>

来自libxml webpage

  

命名空间值必须是绝对URL,但URL不是   必须指向Web上的任何现有资源。

因此,如果可以,请将您的xmlns属性更改为某个绝对网址。

答案 1 :(得分:1)

使用XPath查找节点可能会消除您的错误:

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