我正在尝试使用多个名称空间声明来加载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”),则错误消失
答案 0 :(得分:2)
PHP XML扩展(DOM,XMLReader,SimpleXml等)use libxml library来解析XML文件。
此错误的原因是 libxml需要xmlns
atttibute (即xmlns="http://example.com/some-unique-url"
)中的绝对网址,但只获取文字(xmlns="UBLCatalogDocument"
)。< / p>
命名空间值必须是绝对URL,但URL不是 必须指向Web上的任何现有资源。
因此,如果可以,请将您的xmlns
属性更改为某个绝对网址。
答案 1 :(得分:1)
使用XPath查找节点可能会消除您的错误:
$xpath = new DOMXpath($doc);
$Items = $xpath->query('//item[@xmlns="UBLCommonAggregateComponents"]');