【问题标题】:Parse correctly XML with PHP使用 PHP 正确解析 XML
【发布时间】:2021-08-13 04:54:25
【问题描述】:

我有这个 XML 链接示例:

https://np.tritondigital.com/public/nowplaying?mountName=KFRQFMAAC&numberToFetch=3&eventType=track&request.preventCache=1621376522745

在节点“nowplaying-info-list”内部,我有一个名为“nowplaying-info”的节点,我需要获取节点“nowplaying-info”的每个属性,例如,

<nowplaying-info-list>
<nowplaying-info mountName="KFRQFMAAC" timestamp="1621894561" type="track">
<property name="cue_time_duration">
<![CDATA[ 05:07 ]]>
</property>
<property name="cue_time_start">
<![CDATA[ 1621894561283 ]]>
</property>
<property name="cue_title">
<![CDATA[ WIND OF CHANGE ]]>
</property>
<property name="program_id">
<![CDATA[ 20363 ]]>
</property>
<property name="track_artist_name">
<![CDATA[ SCORPIONS ]]>
</property>
</nowplaying-info>
<nowplaying-info mountName="KFRQFMAAC" timestamp="1621894008" type="track">
<property name="cue_time_duration">
<![CDATA[ 05:30 ]]>
</property>
<property name="cue_time_start">
<![CDATA[ 1621894008283 ]]>
</property>
<property name="cue_title">
<![CDATA[ ALL RIGHT NOW ]]>
</property>
<property name="program_id">
<![CDATA[ 18664 ]]>
</property>
<property name="track_artist_name">
<![CDATA[ FREE ]]>
</property>
</nowplaying-info>
</nowplaying-info-list>

对于这个响应,我需要进入一个数组:

“提示标题” “program_id” “track_artist_name” 等每个条目...

我尝试使用

simplexml_load_file( XML, 'SimpleXMLElement', LIBXML_NOCDATA ); 

但不要解析正确的数据。

【问题讨论】:

    标签: php xml xml-parsing


    【解决方案1】:

    $xml = simplexml_load_file('https://np.tritondigital.com/public/nowplaying?mountName=KFRQFMAAC&numberToFetch=3&eventType=track&request.preventCache=1621897306'); 回声 $xml; $items = 数组();

    foreach($xml->{'nowplaying-info'} as $node)
        {
            // reset the array 
            $item = array();
            foreach ($node->property as $property){
                //${$property['name']} =$property;
                //echo "\n".${$property['name']};
                $item[(string) $property['name']] =(string) $property;
            }
            $items[] = $item;
           
    
        }
        
    print_r($items);
    

    // 输出

    Array
    (
        [0] => Array
            (
                [cue_time_duration] => 05:03
                [cue_time_start] => 1621898862311
                [cue_title] => WANTED DEAD OR ALIVE
                [program_id] => 20085
                [track_artist_name] => BON JOVI
            )
    
        [1] => Array
            (
                [cue_time_duration] => 05:26
                [cue_time_start] => 1621898331404
                [cue_title] => ENTER SANDMAN
                [program_id] => 20496
                [track_artist_name] => METALLICA
            )
    
        [2] => Array
            (
                [cue_time_duration] => 04:19
                [cue_time_start] => 1621898074316
                [cue_title] => LIMELIGHT
                [program_id] => 18449
                [track_artist_name] => RUSH
            )
    
    )
    

    【讨论】:

    • 我需要从 URL 中读取这个,例如:$xml = simplexml_load_string( 'https://np.tritondigital.com/public/nowplaying?mountName=KFRQFMAAC&amp;numberToFetch=3&amp;eventType=track&amp;request.preventCache=1621897306' ); 这会出现一些错误
    • @AndrésGómez 我更新了我的答案,使用simplexml_load_file(URL);
    • 这工作正常并获得第一个项目,有没有办法迭代到每个名为“nowplaying-info”节点的项目?
    • 好的,它设置为填充数组,我更新了我的答案。如果它适合您,请通过单击答案旁边的复选标记将其标记为已解决。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    相关资源
    最近更新 更多