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: file:///C:/wamp/www/XMLExperiments/UBLCatalog.xml で URI UBLCatlogDocument が絶対ではありません。

私は出力を得ていますが、エラーは迷惑です。

逐語的なエラーは次のとおりです: Notice: DOMDocument::load() [domdocument.load]: xmlns: URI UBLCatlogDocument is not absolute in file:///C:/wamp/www/XMLExperiments/UBLCatalog.xml, line: 4 in C :\wamp\www\XMLExperiments\ItemsXml.php 3 行目

そして、デフォルトの名前空間 (xmlns="UBLCatalogDocument") を削除すると、エラーはなくなります

4

2 に答える 2

2

PHP XML 拡張機能 (DOM、XMLReader、SimpleXml など)は、 libxml ライブラリを使用して XML ファイルを解析します。

このエラーの理由は、libxmlが属性(すなわち) で絶対 URL を想定xmlnsxmlns="http://example.com/some-unique-url"しているのに、テキストしか取得しない ( xmlns="UBLCatalogDocument") ことです。

libxml Web ページから:

名前空間の値は絶対 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 に答える