simplexml_load_file не распознает теги <dc: title>

Я пытаюсь использовать simplexml_load_file() для загрузки XML-файла и достижения тегов <dc:title> , но когда я $xml переменную $xml , загружающую мой XML-файл, все теги, начинающиеся с <dc: не отображаются. Есть ли способ сообщить парсеру включить их? следует ли использовать другой парсер?

Вот мой пример файла:

 <?xml version='1.0' encoding='utf-8'?> <package xmlns="http://www.idpf.org/2007/opf" prefix="ibooks: http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0/" unique-identifier="pub-id" version="3.0" xml:lang="en"> <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:title>test</dc:title> </metadata> </package> 

Код, который я использовал для проверки того, какие теги видны:

 $xml = simplexml_load_file('test.xml'); echo '<pre>';var_dump($xml);echo '</pre>'; 

И результат:

 object(SimpleXMLElement)#1 (2) { ["@attributes"]=> array(3) { ["prefix"]=> string(80) "ibooks: http://vocabulary.itunes.apple.com/rdf/ibooks/vocabulary-extensions-1.0/" ["unique-identifier"]=> string(6) "pub-id" ["version"]=> string(3) "3.0" } ["metadata"]=> object(SimpleXMLElement)#2 (0) { } } 

метаданные на самом деле пусты. Мысли?

Solutions Collecting From Web of "simplexml_load_file не распознает теги <dc: title>"

Во-первых, dc – пространство имен, а не часть имени тега. Для целей тестирования вы можете распечатать пространства имен, используемые в данном xml. Выполнение фрагмента

 $namespaces = $xml->getNamespaces(true); var_dump($namespaces); 

выйдет

 array(3) { '' => string(28) "http://www.idpf.org/2007/opf" 'xml' => string(36) "http://www.w3.org/XML/1998/namespace" 'dc' => string(32) "http://purl.org/dc/elements/1.1/" } 

Вам необходимо зарегистрировать префикс для пространства имен для использования с xpath, и вы можете использовать его для выбора:

 $xml->registerXPathNamespace('b', 'http://purl.org/dc/elements/1.1/'); $a =$xml->xpath('//b:*/text()'); foreach($a as $t) { print($t."\n"); } 

Это приведет к test элемента, который вы хотите получить.