繁体   English   中英

iPhone上的XML(PHP中)解析

[英]XML(in php) parsing on iPhone

我正在开发一个iPhone应用程序,我想将一些数据放入UITableView。 我有一个显示从此处运行的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时(因为我想从数据库中获取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浏览器中的源代码视图(请不要介意一些编码问题)

<?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

(请不要介意一些编码问题)
也许我们不介意,但是xml解析器可能会。
你应该

  • 在http响应标头中设置mimetype
  • 在http响应标头中设置字符集(尽管它已经在xml声明中)
  • 将mysql的客户端encondig设置为utf8,以便接收utf-8编码的数据
  • 使用适当的转义功能处理数据库中的所有数据
  • 甚至更好地使用XMLWriter之类的东西

并且您还应该将错误消息打印为稍微有效的xml文档,因为您告诉客户端它将接收xml。

例如(仅由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>"; ?> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM