Сделайте рабочий файл XML в php (правильно кодируя), чтобы экспортировать данные из онлайн-базы данных на iphone - PullRequest
1 голос
/ 13 марта 2010

Я пытаюсь создать XML-файл для экспорта моих данных из базы данных на мой iphone. Каждый раз, когда я создаю новое сообщение, мне нужно выполнить php-файл, чтобы создать файл xml, содержащий последнее сообщение;)

Хорошо, пока? : D

Вот текущий код php ... но мой nsxmlparser выдает мне код ошибки (33 - строка не запускается). Я понятия не имею, какие функции 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 в своем браузере:

  • Я получил квадраты вместо одинарных кавычек ...
  • Я не вижу <[CDATA [но]]> хорошо видно ... почему?!?

Спасибо за любой вклад;)

Готье.

Ответы [ 4 ]

0 голосов
/ 13 марта 2010

Если вы показали свой php-код в точности так, как он отображается в вашем собственном файле, вы можете попробовать изменить строку, читающую

$sml .= '<channel>';

до

$xml .= '<channel>';

Похоже, вы пропустили начальный тег, который по ошибке был назначен другой переменной.

Клаус

0 голосов
/ 13 марта 2010

Возможно, вам следует использовать библиотеку XML, например, php API вместо конкатенации строк. Сохраняет много головных болей.

Кроме того, XML-файлам нужен один корневой элемент, который содержит все остальные элементы, чтобы быть правильно сформированным (см. Википедия ).

0 голосов
/ 13 марта 2010
<?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>

Это то, что я получаю, используя DOMXML с php5 ... мой скрипт 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();
  ?>
0 голосов
/ 13 марта 2010

Вот пример кода, сгенерированного моим скриптом;)

Копирую вставленный код из исходного кода в браузер;)

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