按 ID 过滤 XML 个文件
Filtering XML file by ID
您好,我在尝试解析 XML 文件时遇到问题
我正在尝试使用 id 仅显示一首歌曲内容
mysongs.php?id=0
它应该显示 "I left my heart on Europa" 歌曲
如果mysongs.php?id=1
它应该显示 "Oh 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;
?>
这可能是类型问题。
尝试回显你的 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;
您需要将 id 设置为 xml 文件中列参数的一部分
尝试下面的代码
<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>";
}
?>
您好,我在尝试解析 XML 文件时遇到问题
我正在尝试使用 id 仅显示一首歌曲内容
mysongs.php?id=0 它应该显示 "I left my heart on Europa" 歌曲
如果mysongs.php?id=1
它应该显示 "Oh 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;
?>
这可能是类型问题。
尝试回显你的 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;
您需要将 id 设置为 xml 文件中列参数的一部分
尝试下面的代码
<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>";
}
?>