【发布时间】:2019-02-15 00:30:12
【问题描述】:
很抱歉问这个问题,但这让我发疯了。 我一直在使用 php SimpleXMLElement 作为我的 XML 解析器,并且我查看了很多示例,并且已经放弃了很多次。但是,现在,我只需要让这个工作。有很多关于如何获取简单字段的示例,但没有那么多字段中的值...
我正在尝试从此 XML 中获取“track_artist_name”值作为 php 中的命名变量。
<nowplaying-info-list>
<nowplaying-info >
<property name="track_title"><![CDATA[Song Title]]></property>
<property name="track_album_name"><![CDATA[Song Album]]></property>
<property name="track_artist_name"><![CDATA[Song Artist]]></property>
</nowplaying-info>
</nowplaying-info-list>
我尝试过使用 xpath:
$sxml->xpath("/nowplaying-info-list[0]/nowplaying-info/property[@name='track_artist_name']"));
但是,我知道这一切都搞砸了,无法正常工作。
我最初也尝试过这样的事情,认为这是有道理的 - 但没有:
attrs = $sxml->nowplaying_info[0]->property['@name']['track_artist_name'];
echo $attrs . "\n\n";
我知道我可以通过以下方式获取值:
$sxml->nowplaying_info[0]->property[2];
有时 XML 结果中的行数比其他时间多,因此,它会用错误的数据破坏计算。
有人可以解释我的问题吗?我只是想把艺术家的名字改成一个变量。非常感谢。
*** 工作更新:**
我不知道有不同的 XML 解释器方法,并且正在使用以下 XML 解释器版本:
// read feed into SimpleXML object
$sxml = new SimpleXMLElement($json);
这不起作用,但由于此处的帮助,现在已更新为以下(针对该部分代码)。
$sxml_new = simplexml_load_string($json_raw);
if ( $sxml_new->xpath("/nowplaying-info-list/nowplaying-info/property[@name='track_artist_name']") != null )
{
$results = $sxml_new->xpath("/nowplaying-info-list/nowplaying-info/property[@name='track_artist_name']");
//print_r($results);
$artist = (string) $results[0];
// var_dump($artist);
echo "Artist: " . $artist . "\n";
}
【问题讨论】:
-
var_dump($sxml) ?
-
Xpath 从
[1]开始计数,但不为零