我正在开发一个iPhone应用程序,我想把一些数据放到UITableView。 我有一个应用程序显示从here运行的几个xml解析器。
然后,我将GDataXMLParser与该项目分开并使其运行但是 我有一个奇怪的问题,我无法弄清楚。
这是放入php文件的代码。
- (void)start {
self.startTimeReference = [NSDate timeIntervalSinceReferenceDate];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
self.parsedSongs = [NSMutableArray array];
NSURL *url = [NSURL URLWithString:@"http://mydomain.blabla/phpxmltest.php"];
[NSThread detachNewThreadSelector:@selector(downloadAndParse:) toTarget:self withObject:url];
}
当我直接使用echo创建一个php到xml时,就像这样,
......
echo "<entry><title>this is the TEST</title><item>TEST</item></entry>";
......
iPhone应用程序会像XML一样解析此代码。 但是当我使用mySQL查询创建一个php到xml(因为我想从DB创建一个xml项目)时,就像这样,
<?php
echo '<?xml version="1.0" encoding="UTF-8"?>';
$result = mysql_connect("localhost", "my ID", "my Password");
mysql_select_db("my DB");
$q = "select name, price, age, likeit, keyword from Table where category=101";
$result = mysql_query($q);
$num_rows = mysql_num_rows($result);
echo "<entry>\n";
for ($i=1; $i<=$num_rows; $i++) {
$row = mysql_fetch_assoc($result);
echo "<item>\n";
echo "<title>" . $row["name"] . "</title>\n";
echo "<category>" . $row["price"] . "</category>\n";
echo "<artist>" . $row["age"] . "</artist>\n";
echo "<album>" . $row["likeit"] . "</album>\n";
echo "<releasedate>" . $row["keyword"] . "</releasedate>\n";
echo "</item>\n";
}
echo "</entry>";
?>
iPhone应用程序无法解析此代码。它告诉我XML中没有项目。 对我来说最奇怪的是,Web浏览器上的结果完全相同。 当我将URL放在浏览器中时,输出本身和源(具有浏览器的查看源功能)完全相同。这是Web浏览器中的源视图。(Plz不介意一些编码问题)
<?xml version="1.0" encoding="UTF-8"?>
<entry>
<item>
<title>������ ���ĺ� ������</title>
<category>11000</category>
<artist>3</artist>
<album>0</album>
<releasedate>���ĺ� ���߱�</releasedate>
</item>
<item>
<title>���ĺ� ��������</title>
<category>18000</category>
<artist>3</artist>
<album>0</album>
<releasedate>���ĺ� ����</releasedate>
</item>
…..
我努力使它成功但对我来说太难了。我是iOS和Web编程的先驱。请让我知道问题和解决方案是什么。 提前谢谢你!:D
答案 0 :(得分:0)
(Plz不介意一些编码问题)也许我们不介意,但xml解析器可能会这样做。
并且您还应该将错误消息打印为有点有效的xml文档,因为您告诉客户端它将接收xml。
E.g。 (仅由php -l
测试):
<?php
if ( headers_sent() ) {
die("can't set mimetype and/or charset after output has been sent to the client");
}
ini_set('default_charset', 'utf-8');
ini_set('default_mimetype', 'text/xml');
// ini_set('default_mimetype', 'application/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
$mysql = mysql_connect("localhost", "my ID", "my Password");
if ( !$mysql ) {
die('<error>database connection failed</error>');
}
if ( !mysql_select_db("my DB", $mysql) ) {
die('<error>database selection failed</error>');
}
if ( !mysql_set_charset('utf8', $mysql) ) {
die('<error>setting database selectiocharset failed</error>');
}
$q = 'SELECT name, price, age, likeit, keyword FROM Table WHERE category=101';
$result = mysql_query($q, $mysql);
if ( !$result ) {
die('<error>database query failed</error>');
}
echo "<entry>\n";
while( false!=($row=mysql_fetch_assoc($result)) ) {
echo '
<item>
<title>', htmlspecialchars($row["name"], 'utf-8'), '</title>
<category>', htmlspecialchars($row["price"], 'utf-8'), '</category>
<artist>', htmlspecialchars($row["age"], 'utf-8'), '</artist>
<album>', htmlspecialchars($row["likeit"], 'utf-8'), '"</album>
<releasedate>', htmlspecialchars($row["keyword"], 'utf-8'), '</releasedate>
</item>';
}
echo "</entry>";
?>