Обработка PHP XML, атрибут чтения - PullRequest
0 голосов
/ 05 января 2012

Я использую функцию simplexml_load_string для обработки строки xml.

Ниже приведена строка xml.

   <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#"    
    xmlns:ext="http://musicbrainz.org/ns/ext#-2.0">
    <artist-list offset="0" count="1422">
       <artist ext:score="100" type="Person" id="72c536dc-7137-4477-a521-567eeb840fa8">
       <name>Bob Dylan</name>
       <sort-name>Dylan, Bob</sort-name>
       <gender>male</gender><country>US</country>
       <life-span><begin>1941-05-24</begin></life-span>
  </artist>
  </artist-list>
  </metadata>

Когда функция возвращается, я получаю следующий массив.Я хочу прочитать исполнителя ext: score = "value", но он не возвращается, как бы получить этот атрибут тега?

 SimpleXMLElement Object
 (
   [artist-list] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [offset] => 0
                [count] => 1422
            )

        [artist] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [@attributes] => Array
                            (
                                [type] => Person
                                [id] => 72c536dc-7137-4477-a521-567eeb840fa8
                            )

                        [name] => Bob Dylan
                        [sort-name] => Dylan, Bob
                        [gender] => male
                        [country] => US
                        [life-span] => SimpleXMLElement Object
                            (
                                [begin] => 1941-05-24
                            )
                     }
              }      
     }
 }      

1 Ответ

1 голос
/ 05 января 2012

Это вещь пространства имен.Зарегистрируйте два пространства имен и используйте их при выполнении запроса XPath или при просмотре атрибутов.

Вот код, протестированный с вашим XML, надеюсь, он будет полезен

<?php

    try {
        $xml = simplexml_load_file( "meta.xml" );

        $xml->registerXPathNamespace('m', 'http://musicbrainz.org/ns/mmd-2.0#' );
        $xml->registerXPathNamespace('ext', 'http://musicbrainz.org/ns/ext#-2.0' );

        // Find the customer
        $result = $xml->xpath('//m:artist');

        while(list( , $node) = each($result)) {
            echo  $node."\r\n";

            echo  "Default Name Space Attributes: \r\n";
            foreach($node->attributes() as $a => $b) { 
                echo "\t".$a.":'".$b."'";
            }

            echo  "Name Space Attributes: \r\n";
            foreach($node->attributes( "ext", 1 ) as $a => $b) { 
                echo "\t".$a.":'".$b."'";
            }
        }
    } catch( Exception $e ) {
        echo "Exception on line ".$e->getLine()." of file ".$e->getFile()." : ".$e->getMessage()."<br/>";
    }


?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...