2

我正在尝试加载具有多个命名空间声明的 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 UBLDatalogDocument 在 file:///C:/wamp/www/XMLExperiments/UBLCatalog.xml 中不是绝对的,

我得到了输出,但这个错误很烦人。

逐字记录错误是: 注意:DOMDocument::load() [domdocument.load]: xmlns: URI ULCatalogDocument is not absolute in file:///C:/wamp/www/XMLExperiments/UBLCatalog.xml, line: 4 in C :\wamp\www\XMLExperiments\ItemsXml.php 在第 3 行

而且,如果我删除默认命名空间 (xmlns="UBLDatalogDocument"),错误就会消失

4

2 回答 2

2

PHP XML 扩展(DOM、XMLReader、SimpleXml 等)使用 libxml 库来解析 XML 文件。

出现此错误的原因是libxml 需要在xmlnsatttibute (ie xmlns="http://example.com/some-unique-url") 中使用绝对 URL,但只获取文本 ( xmlns="UBLCatalogDocument")。

libxml 网页

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

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

于 2013-12-29T22:11:36.857 回答
1

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

$xpath = new DOMXpath($doc);
$Items = $xpath->query('//item[@xmlns="UBLCommonAggregateComponents"]');
于 2012-09-07T13:22:49.760 回答