Bonjour,

J'essaye de lire un flux XML et de parser celui-ci afin d'enregistrer les données dans la DB de mon application.

J'ai donc :
1. Un script php qui construit mon flux XML
2. Un programme Java qui appelle l'url de ce script et qui doit parser le flux XML reçu.

La script php construit le flux XML en exécutant une requête sur une DB Mysql encodé en UTF-8. Voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
header('Content-Type: text/xml; charset=UTF-8');
$xml = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>";
 
$xml .= '<rprodlist>';
$sql = 'SELECT 100R_ID, 100R_TYPE, 100R_MARQUE, 100R_NOMPROD, 100R_PRIX, 100R_DATELIMITE, 100R_COUPON, 100R_INFOCOMPL, 100R_ADRESSE, 100R_END '
     . 'FROM phpbb3_100R '
	 . 'WHERE 100R_END = 0';
 
//echo "DEBUG sql = " . $sql;
 
if(!$result = $db->sql_query($sql))
//if(!$result = $db->sql_query_limit($sql,5))
{
	trigger_error("Erreur SQL");               
}
 
function parseForEuro($text)
{
	//echo "<br/>Texte avant : " . $text;
	$text = str_replace ( "€", "€", $text);
	return $text;
}
 
while($row = $db->sql_fetchrow($result))
{
	$id = $row['100R_ID'];
	$type = $row['100R_TYPE'];
	$marque = $row['100R_MARQUE'];
	$nomprod = $row['100R_NOMPROD'];
	$prix = parseForEuro($row['100R_PRIX']);
	$datelimite = $row['100R_DATELIMITE'];
	$coupon = $row['100R_COUPON'];
	$infocompl = parseForEuro($row['100R_INFOCOMPL']);
	$adresse = $row['100R_ADRESSE'];
	$end = $row['100R_END'];
 
	//echo $infocompl;
	$xml .= '<item>';
	$xml .= '<id>'.$id.'</id>';
	$xml .= '<type>'.$type.'</type>';
	$xml .= '<marque>'.$marque.'</marque>';
	$xml .= '<nomprod>'.$nomprod.'</nomprod>';
	$xml .= '<prix>'.$prix.'</prix>';
	$xml .= '<datelimite>'.$datelimite.'</datelimite>';
	$xml .= '<coupon>'.$coupon.'</coupon>';
	$xml .= '<infocompl>'.$infocompl.'</infocompl>';
	$xml .= '<adresse>'.$adresse.'</adresse>';
	$xml .= '<end>'.$end.'</end>';
	$xml .= '</item>';	
 
}
 
 
$xml .= '</rprodlist>';
echo $xml;
 
$db->sql_freeresult($result);
?>
et mon code Java qui récupère le flux XML et le parse :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 try
        {
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            URL u = new URL("http://www.xxx.fr/xxx.php"); 
 
 
            Document doc = builder.parse(u.openStream());
            NodeList nodes = doc.getElementsByTagName("item");
 
            for(int i=0;i<nodes.getLength();i++)
            {
            }
 
...
Alors mon soucis est que de cette manière, je récupère bien les données de mon flux mais les accents sont tous encodés avec des caractères spéciaux.

Par contre si j'affiche mon flux XML dans un navigateur, mes accents sont corrects.

Si je modifie, la ligne
$xml = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>";
en
$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";

j'ai alors une erreur lors du parsing.


Pouvez-vous me dire comment récupérer ou convertir le flux reçu afin de pouvoir enregistrer mes données avec des accents corrects dans la DB de mon programme Java.

D'avance merci.