在php(正确编码)中创建一个可用的xml文件,将数据从在线数据库导出到iphone

时间:2010-03-13 12:43:54

标签: php iphone xml encoding nsxmlparser

我正在尝试制作一个xml文件,将我的数据从我的数据库导出到我的iphone。每次我创建一个新帖子时,我都需要执行一个php文件来创建一个包含最新帖子的xml文件;)

好的到目前为止? :d

这是当前的PHP代码...但我的nsxmlparser给了我一个错误代码(33 - String未启动)。我不知道我必须使用什么样的PHP函数...

<?php

// Èdition du dÈbut du fichier XML
$xml .= '<?xml version=\"1.0\" encoding=\"UTF-8\"?>';
$sml .= '<channel>'; 
$xml .= '<title>Infonul</title>';
$xml .= '<link>aaa</link>';
$xml .= '<description>aaa</description>';


// connexion a la base (mettre ‡ jour le mdp)
$connect = mysql_connect('...-12','...','...');


/* selection de la base de donnÈe mysql */
mysql_select_db('...');


// selection des 20 derniËres news
$res=mysql_query("SELECT u.display_name as author,p.post_date as date,p.comment_count as commentCount, p.post_content as content,p.post_title as title FROM wp_posts p, wp_users u WHERE p.post_status = 'publish' and p.post_type = 'post' and p.post_author = u.id ORDER BY p.id DESC LIMIT 0,20");




// extraction des informations et ajout au contenu
while($tab=mysql_fetch_array($res)){   

 $title=$tab[title];
 $author=$tab[author];
 $content=$tab[content]; //html stuff
 $commentCount=$tab[commentCount];
 $date=$tab[date];

 $xml .= '<item>';
 $xml .= '<title>'.$title.'</title>';
 $xml .= '<content><![CDATA['.$content.']]></content>';
 $xml .= '<date>'.$date.'</date>';
 $xml .= '<author>'.$author.'</author>';
 $xml .= '<commentCount>'.$commentCount.'</commentCount>';
 $xml .= '</item>'; 
}

// Èdition de la fin du fichier XML
$xml .= '</channel>';
$xml = utf8_encode($xml);

echo $xml;

// Ècriture dans le fichier
if ($fp = fopen("20news.xml",'w'))
{
 fputs($fp,$xml);
 fclose($fp);
}

//mysql_close();

?>

当我在浏览器中打开20news.xml时,我注意到了一些事情:

  • 我得到了正方形而不是单引号......
  • 我看不到&lt; [CDATA [but]]&gt;显而易见......为什么?!?

感谢任何输入;)

高堤耶。

4 个答案:

答案 0 :(得分:0)

以下是我的脚本生成的示例代码;)

我复制粘贴了浏览器中源代码的代码;)

  <?xml version=\"1.0\" encoding=\"UTF-8\"?>
<title>Infonul</title>
<link>aaa</link>
<description>aaa</description>
<item>
<title>Bing évolue et s'anime</title>
<content>
<![CDATA[<p style="text-align: center;"><a href="kkk"><img class="aligncenter size-medium wp-image-548" title="bing" src="http://www.infonul.com/wp-content/uploads/2010/03/bing-300x213.png" alt="" width="300" height="213" /></a></p>
    Vous êtes de plus en plus à l'utiliser, ce moteur de recherche lancé par Microsoft évolue dans sa version française pour ressembler un peu plus à la version US.<!--more--> Comment ? A travers les images de fond qui avaient déjà pour habitude de changer chaque jour vous pourrez maintenant "interagir" avec l'image sur certains points qui pointent sur un site en rapport direct avec l'illustration. Une façon un peu original de présenter le moteur de recherche.]]>
</content>
<date>2010-03-03 23:23:15</date>
<author>kkk kk</author>
<commentCount>0</commentCount>
</item>

<item>
<title>Du quadruple play chez Orange ?</title>
<content>...</content><date>2010-02-28 20:32:13</date><author>...</author><commentCount>0</commentCount>
</item>
</channel>

答案 1 :(得分:0)

也许您应该使用XML库,例如php的DOM API,而不是字符串连接。节省了很多麻烦。

此外,XML文件需要一个包含所有其他元素的根元素,以便格式良好(参见Wikipedia)。

答案 2 :(得分:0)

<?xml version="1.0" encoding="UTF-8"?>
<news>
  <item>
    <author>...</author>
    <title>Bing �volue et s'anime</title>
    <content><![CDATA[<p style="text-align: center;"><a href="..."><img class="aligncenter size-medium wp-image-548" title="bing" src="http://www.infonul.com/wp-content/uploads/2010/03/bing-300x213.png" alt="" width="300" height="213" /></a></p>
Vous �tes de plus en plus � l'utiliser, ce moteur de recherche lanc� par Microsoft �volue dans sa version fran�aise pour ressembler un peu plus � la version US.<!--more-->�Comment ? A travers les images de fond qui avaient d�j� pour habitude de changer chaque jour vous pourrez maintenant "interagir" avec l'image sur certains points�qui pointent sur�un site�en rapport direct avec l'illustration. Une fa�on un peu original de pr�senter le moteur de recherche.]]></content>
  </item>
  <item>
    <author>...</author>

    <title>Du quadruple play chez Orange ?</title>
    <content><![CDATA[<p style="text-align: center;"><a href="http://www.infonul.com/wp-content/uploads/2010/03/logo_orange_print1.gif"><img class="aligncenter size-full wp-image-543" title="orange logo" src="http://www.infonul.com/wp-content/uploads/2010/03/logo_orange_print1.gif" alt="" width="207" height="207" /></a></p>
�

Vous en r�viez ? C'est pour bient�t ! A l'annonce de ses r�sultats pour 2009, le groupe en a profit� pour laisser passer quelques messages � ce sujet.<!--more-->�En effet, Free s'appr�te � d�barquer sur le march� mobile et - il faut le dire - Orange ne propose�RIEN d'avantageux si vous avez votre box et votre mobile chez eux contrairement � Bouygues qui propose ses formules IDEO � des tarifs comp�titifs !Pour quand ? "D�ici � l'�t�"... Affaire � suivre.]]></content>
  </item>
</news>

这就是我用php5使用DOMXML ...我的php脚本在下面;)

<?php

//phpinfo();

$dom = new DOMdocument('1.0', 'UTF-8');
$dom->formatOutput = true;

$r = $dom->createElement('news');
$dom->appendChild( $r );

// connexion a la base (mettre ‡ jour le mdp)
$connect = mysql_connect('...-12','...','...');


/* selection de la base de donnÈe mysql */
mysql_select_db('...');


// selection des 20 derniËres news
$res=mysql_query("SELECT u.display_name as author,p.post_date as date,p.comment_count as commentCount, p.post_content as content,p.post_title as title FROM wp_posts p, wp_users u WHERE p.post_status = 'publish' and p.post_type = 'post' and p.post_author = u.id ORDER BY p.id DESC LIMIT 0,20");


// extraction des informations et ajout au contenu
while($tab=mysql_fetch_array($res)){ 

  $b = $dom->createElement( "item" );

  $author = $dom->createElement( "author" );
  $author->appendChild(
  $dom->createTextNode( $tab['author'] )
  );
  $b->appendChild( $author );

  $title = $dom->createElement( "title" );
  $title->appendChild(
  $dom->createTextNode( $tab['title'] )
  );
  $b->appendChild( $title );

  $content = $dom->createElement( "content" );
  $content->appendChild(
  $dom->createCDATASection($tab['content'])
  );
  $b->appendChild( $content );

  $r->appendChild( $b );

  }

  echo $dom->saveXML();
  ?>

答案 3 :(得分:0)

如果您显示的PHP代码与您自己的文件中显示的完全相同,则可以尝试更改行读取

$sml .= '<channel>';

$xml .= '<channel>';

您似乎错过了起始标记,错误地将其分配给了另一个变量。

克劳斯