按ID过滤XML文件

时间:2019-03-04 10:18:55

标签: php ajax xml rss

您好,当我尝试解析XML文件时遇到问题

例如,我尝试仅使用id显示一首歌曲内容

mysongs.php?id = 0 它应该显示“我在Europa上留下了我的心”这首歌

,如果mysongs.php?id = 1

应该播放“哦,Ganymede”歌曲

我要使用ID代替歌曲编号 我的问题是,当我使用[$id]而不是数字[0]无效时

echo $mysongs->song[$id]->title;

请问如何解决我的问题

这是我的XML文件内容songs.xml

<album>
    <song dateplayed="2011-07-24 19:40:26">
        <title>I left my heart on Europa</title>
        <artist>Ship of Nomads</artist>
    </song>
    <song dateplayed="2011-07-24 19:27:42">
        <title>Oh Ganymede</title>
        <artist>Beefachanga</artist>
    </song>
  </album>

下面的我的PHP代码

<?php
$id = $_GET['id'];
$mysongs = simplexml_load_file('songs.xml');
echo $mysongs->song[0]->title;
?>

2 个答案:

答案 0 :(得分:1)

可能是类型问题。

尝试回显id的类型,除非您将其解析为字符串:

<?php
$id = $_GET['id'];
echo gettype($id);

然后,当您执行$mysongs->song[$id]时,它不等于$mysongs->song[0],而是等效于$mysongs->song['0'],它不是相同的索引。

因此,要获得预期的输出,应在将其用作索引之前将其强制转换为int。为此,您可以使用强制转换($id = (int) $_GET['id'];)或PHP版本intval$id = intval($_GET['id']);

中不可用的强制转换

然后最终结果看起来像是...

<?php
$id = (int) $_GET['id'];
$mysongs = simplexml_load_file('songs.xml');
echo $mysongs->song[$id]->title;

答案 1 :(得分:0)

您需要将id设置为xml文件中column参数的一部分

在下面尝试代码

<album>
    <song dateplayed="2011-07-24 19:40:26">
         <id>1</id>
        <title>I left my heart on Europa</title>
        <artist>Ship of Nomads</artist>
    </song>
    <song dateplayed="2011-07-24 19:27:42">
        <id>2</id>
        <title>Oh Ganymede</title>
        <artist>Beefachanga</artist>
    </song>
  </album>

您可以使用以下两种方法获得结果

1。)使用直接元素方法

下面的示例获取“ .xml”文件的第一个和第二个元素中and元素的节点值:

<?php
$id = $_GET['id'];
$mysongs = simplexml_load_file('songs.xml')or die("Error: Cannot create object");
//get the first record
echo $mysongs->song[0]->id;
echo $mysongs->song[0]->title;

//get the second record
echo $mysongs->song[1]->id;
echo $mysongs->song[1]->title;
?>

2。)使用元素循环方法

 <?php
$mysongs=simplexml_load_file("songs.xml") or die("Error: Cannot create object");
foreach($mysongs->children() as $song_album) {
    echo $song_album->id . ", ";
    echo $song_album->title . ", ";
    echo $song_album->artist . "<br>";
}
?>