Я пытаюсь загрузить файл 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 не является абсолютным в файле: /// C: /wamp/www/XMLExperiments/UBLCatalog.xml, строка: 4 в C : \ wamp \ www \ XMLExperiments \ ItemsXml.php в строке 3
И, если я удалю пространство имен по умолчанию (xmlns = "UBLCatalogDocument"), ошибка исчезнет
PHP XML extenstions (DOM, XMLReader, SimpleXml и т. Д.) Используют библиотеку libxml для анализа XML-файлов.
Причина этой ошибки заключается в том, что libxml ожидает абсолютный URL-адрес в xmlns
atttibute (т. Е. Xmlns xmlns="http://example.com/some-unique-url"
), но получает только текст ( xmlns="UBLCatalogDocument"
).
На веб-странице libxml :
Значение пространства имен должно быть абсолютным URL-адресом, но URL-адрес не должен указывать на какой-либо существующий ресурс в Интернете.
Поэтому, если это возможно, измените свой атрибут xmlns
на некоторый абсолютный URL.
Поиск ваших узлов с помощью XPath может избавиться от вашей ошибки:
$xpath = new DOMXpath($doc); $Items = $xpath->query('//item[@xmlns="UBLCommonAggregateComponents"]');