使用 PHP 正确解析 XML
Parse correctly XML with PHP
我有这个 XML link 例子:
在节点“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>
对于这个响应,我需要进入一个数组:
"cue_title"
“program_id”
“track_artist_name”
每个条目等...
我正在尝试使用
simplexml_load_file( XML, 'SimpleXMLElement', LIBXML_NOCDATA );
但不正确解析数据。
$xml = simplexml_load_file( 'https://np.tritondigital.com/public/nowplaying?mountName=KFRQFMAAC&numberToFetch=3&eventType=track&request.preventCache=1621897306' );
回声$xml;
$items = array();
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
)
)
我有这个 XML link 例子:
在节点“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>
对于这个响应,我需要进入一个数组:
"cue_title" “program_id” “track_artist_name” 每个条目等...
我正在尝试使用
simplexml_load_file( XML, 'SimpleXMLElement', LIBXML_NOCDATA );
但不正确解析数据。
$xml = simplexml_load_file( 'https://np.tritondigital.com/public/nowplaying?mountName=KFRQFMAAC&numberToFetch=3&eventType=track&request.preventCache=1621897306' ); 回声$xml; $items = array();
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
)
)