2010-03-13 9 views
1

Je suis en train de faire un fichier xml pour exporter mes données de ma base de données vers mon iphone. Chaque fois que je crée un nouveau message, j'ai besoin d'exécuter un fichier php pour créer un fichier xml contenant le dernier message;)Faire un fichier xml de travail en php (encodage correctement) pour exporter les données de la base de données en ligne à l'iphone

Okay jusqu'ici? : D

Voici le code php actuel ... mais mon nsxmlparser me donne un code d'erreur (33 - La chaîne n'est pas démarrée). Je ne sais pas quel genre de fonctions php Je dois utiliser ...

<?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(); 

?> 

J'ai remarqué quelques petites choses quand j'ouvrir 20news.xml dans mon navigateur:

  • j'ai eu des places au lieu de simple citations ...
  • Je ne peux pas voir < [CDATA [mais]]> est clairement visible ... pourquoi?!?

Merci pour toute entrée;)

Gotye.

+0

Pouvez-vous montrer un exemple de fichier XML généré? –

Répondre

0

Peut-être que vous devriez utiliser une bibliothèque XML, par exemple DOM API de php, au lieu de la concaténation de chaîne. Enregistre beaucoup de maux de tête.

De plus, les fichiers XML ont besoin d'un seul élément racine qui contient tous les autres éléments pour être bien formé (voir Wikipedia).

+0

Merci pour l'entrée, vous n'avez pas résolu mon problème, mais vous m'a donné un bon conseil, il est beaucoup plus clair en utilisant DOMXML;) – gotye

0

Voici un exemple de code généré par mon script;)

copier collé le code à partir du code source dans le navigateur;)

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

D'accord, voici la solution, je juste besoin d'ajouter ce code: $ dom-> createCDATASection (utf8_encode ($ tab ['content'])) – gotye

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> 

C'est ce que je me l'aide DOMXML avec php5 ... mon script php est ci-dessous;)

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

Si vous avez montré votre code php exactement tel qu'il apparaît dans votre propre fichier, vous pourriez essayez de changer la ligne de lecture

$sml .= '<channel>'; 

à

$xml .= '<channel>'; 

Il semble que vous ayez manqué la balise de départ, qui a été attribuée à une variable différente par erreur. Clas

+0

Merci, j'ai trouvé la solution par moi même ... J'avais besoin d'ajouter une ligne de code particulière dans mon script php pour l'encoder correctement;) – gotye