Rechercher : dans
Par :

Parsing xml - souci de parsing

Dernière réponse le 20 mai 2009 à 14:07:43 yishay, le 19 mai 2009 à 22:59:51 
 Signaler ce message aux modérateurs

Bonjour,

j'aurais besoin d'aide par rapport au parsing xml suivant :
le code suivant me permet de rentrer en base uniquement les données mises en gras en somme le contenu du paragraph_1 ne rentre pas en base de données.
Auriez vous une réponse à me donner ?
merci infiniment d'avance.

<?php
defined( 'ACSSES' ) or die( '' );
$parametres['test'] = array(
"TABLE" => "form", // table cible
"IDTABLE" => "submission_id", // champ compteneur des registres
"ROOT" => "vide", // champ sans action
"REFERENCE" => "idxml", // champ compteneur des registres
"CASINOS" => "sql_requette", // champ compteneur des registres
"URL_IMG" => "http://www.test.com",
"URL_LOCALIZED" => "http://www.test.com",
"PARAGRAPHS" => "vide", // enveloppe PARAGRAPH_1 et PARAGRAPH_2
"PARAGRAPH_1" => "vide", // enveloppe TITLE et CONTENU
"PARAGRAPH_2" => "vide", // enveloppe TITLE et CONTENU
"MJ" => "oui",
);

// tableau de relation entres les champs
$champs_sql['test'] = array(
"IDENTIFIANT" => "codecas",
"ID_RESER" => "idxml",
"TITLE" => "contenu",
"CONTENU" => "type",
"TITLE" => "col_1",
"CONTENU" => "contact",

);

?>

Configuration: Windows Vista
Firefox 3.0.8

Meilleures réponses pour « parsing xml souci de parsing » dans :
Parse error: syntax error, unexpected $end VoirLorsque l'on programme en Php, on se retrouve inévitablement un jour devant ce genre d'erreur: Parse error: syntax error, unexpected $end in Command line code on line 1 En français, ça signifie grossièrement: "Erreur d'analyse du code: il y a une...
PHP Parse error: unexpected '&lt;' in ... eval()'d code on l VoirSymptômes Lors de l'utilisation de la fonction eval() en PHP, ce dernier se plaint et vous affiche un message de la forme suivante : PHP Parse error: syntax error, unexpected '
Télécharger DriveImage XML VoirDriveImage XML est un programme permettant de faire des images du système (partitions et lecteurs logiques) à des fins de sauvegarde, à la manière de Norton Ghost. Ce programme permet : De créer des images des lecteurs logiques et des...
PHP - Parser du XML VoirIntroduction à XML PHP permet l'analyse syntaxique (parsage ou parsing en anglais) d'un document XML. Le langage XML (eXtensible Markup Language, traduisez Langage à balises extensibles) est un métalangage, c'est-à-dire un langage permettant de...
Introduction à XML VoirPrésentation de XML XML (entendez eXtensible Markup Language et traduisez Langage à balises étendu, ou Langage à balises extensible) est en quelque sorte un langage HTML amélioré permettant de définir de nouvelles balises. Il s'agit effectivement...
DOM (Document Object Model) et SAX (Simple API for XML) VoirXML permet de définir la structure du document uniquement, ce qui permet d'une part de pouvoir définir séparément la présentation de ce document, d'autre part d'être capable de récupérer les données présentes dans le document pour les...

1

ahmet0851, le 20 mai 2009 à 09:31:06

Salut,

Je ne comprend pas très bien la question mais es-ce normal que dans ton tableau "champs_sql" il y a deux fois TITLE et 2xCONTENU ?? Si quelqu'un vous aide un merci et un résolu (petite case à droite de votre 1er message) !! 

Répondre à ahmet0851

2

yishay, le 20 mai 2009 à 09:34:00

Bonjour,

en fait pour être plus clair dans le fichier xml parsé il y a les informations suivantes :
<PARAGRAPHS>
<PARAGRAPH_1>
<TITLE><![CDATA[TITRE v1]]></TITLE>
<CONTENU><![CDATA[texte v1]]></CONTENU>
</PARAGRAPH_1>
<PARAGRAPH_2>
<TITLE><![CDATA[TITRE v2]]></TITLE>
<CONTENU><![CDATA[texte v2]]></CONTENU>
</PARAGRAPH_2>
</PARAGRAPHS>

Merci infiniment pour votre retour.

Répondre à yishay

3

ahmet0851, le 20 mai 2009 à 09:38:00

Je suis presque d'accord pour la structure, les deux paragraphes sont les mêmes donc moi j'aurai plutot vu

<PARAGRAPHS>

    <PARAGRAPH>
        <TITLE>tata</TITLE>
        <CONTENU>tutu</CONTENU>
    </PARAGRAPH>

    <PARAGRAPH>
        <TITLE>toto</TITLE>
        <CONTENU>titi</CONTENU>
    </PARAGRAPH>

</PARAGRAPHS> 


Ensuite ça ne répond pas à la question du pourquoi 2xTITLE et 2xContenu dans le tableau champs_sql et si tu veux vraiment garder ta structure XML renomme ces deux paramètres par TITLE_1 CONTENU_1 et TITLE_2 CONTENU_2

Répondre à ahmet0851

4

yishay, le 20 mai 2009 à 11:07:34

En fait la forme du xml m'est imposé aussi je n'ai pas de choix sinon j'aurais fait ainsi :
<PARAGRAPHS>
<PARAGRAPH_1>
<TITLE1><![CDATA[TITRE v1]]></TITLE1>
<CONTENU1><![CDATA[texte v1]]></CONTENU1>
</PARAGRAPH_1>
<PARAGRAPH_2>
<TITLE2><![CDATA[TITRE v2]]></TITLE2>
<CONTENU2><![CDATA[texte v2]]></CONTENU2>
</PARAGRAPH_2>
</PARAGRAPHS>
Et ainsi traiter l'info comme ça dans le php :
"TITLE1" => "contenu",
"CONTENU1" => "type",
"TITLE2" => "col_1",
"CONTENU2" => "contact",
C'est ça le problème !
Merci beaucoup

Répondre à yishay

5

ahmet0851, le 20 mai 2009 à 11:20:32

Je fais un petit test

<?php

$champs_sql['test'] = array(
"IDENTIFIANT" => "codecas",
"ID_RESER" => "idxml",
"TITLE" => "contenu",
"CONTENU" => "type",
"TITLE" => "col_1",
"CONTENU" => "contact",
); 

foreach($champs_sql['test'] as $key => $val)
	echo "champ_sql['test']['".$key."'] = $val <br/>";
?>


m'affiche

champ_sql['test']['IDENTIFIANT'] = codecas
champ_sql['test']['ID_RESER'] = idxml
champ_sql['test']['TITLE'] = col_1
champ_sql['test']['CONTENU'] = contact 


Dans ta base SQL tu ne peux avoir qu'un seul champ nommé TITLE et un seul CONTENU, ton tableau champs_sql ne marchera pas si tu ne renommes pas !!

T'es obligé de renommer !

et pour la strucure XML le mieux aurait été de faire un paragaphe général et avec un attribut pour l'identifier:
<PARAGRAPHS>
   <PARAGRAPH id="1">
      <TITLE>le titre</TITLE>
      <CONTENU>le contenu</CONTENU>
   </PARAGRAPH>
   <PARAGRAPH id="2">
      <TITLE>le titre</TITLE>
      <CONTENU>le contenu</CONTENU>
   </PARAGRAPH>
</PARAGRAPHS> 

Si quelqu'un vous aide un merci et un résolu (petite case à droite de votre 1er message) !! 

Répondre à ahmet0851

6

yishay, le 20 mai 2009 à 11:27:05

Et oui je sais mais y a t-il un moyen de renommer directement au niveau du fichier php :
$champs_sql['test'] = array(
"IDENTIFIANT" => "codecas",
"ID_RESER" => "idxml",
"PARAGRAPH_1.TITLE" => "contenu",
"PARAGRAPH_1.CONTENU" => "type",
"PARAGRAPH_2.TITLE" => "col_1",
"PARAGRAPH_2.CONTENU" => "contact",
);

ça ne marche mais y a t-il une solution possible dans ce genre la ?

Répondre à yishay

7

ahmet0851, le 20 mai 2009 à 11:33:27

J'ai fais ça et ça marche

<?php

$champs_sql['test'] = array(
"IDENTIFIANT" => "codecas",
"ID_RESER" => "idxml",
"TITLE" => array("PARAGRAPHE_1"=>"contenu","PARAGRAPHE_2"=>"col_1"),
"CONTENU" => array("PARAGRAPHE_1"=>"type", "PARAGRAPHE_2"=>"contact"),
); 

foreach($champs_sql['test'] as $key => $val)
	if(is_array($champs_sql['test'][$key]))
		foreach($champs_sql['test'][$key] as $key2 => $val2)
			echo "champ_sql['test']['$key']['$key2'] = $val2 <br/>";
	else
		echo "champ_sql['test']['$key'] = $val <br/>";
		
?>


affiche

champ_sql['test']['IDENTIFIANT'] = codecas
champ_sql['test']['ID_RESER'] = idxml
champ_sql['test']['TITLE']['PARAGRAPHE_1'] = contenu
champ_sql['test']['TITLE']['PARAGRAPHE_2'] = col_1
champ_sql['test']['CONTENU']['PARAGRAPHE_1'] = type
champ_sql['test']['CONTENU']['PARAGRAPHE_2'] = contact 


Au lieu des paragraphe_x comme argument tu peux aussi utiliser des nombres

<?php

$champs_sql['test'] = array(
"IDENTIFIANT" => "codecas",
"ID_RESER" => "idxml",
"TITLE" => array(0=>"contenu",1=>"col_1"),
"CONTENU" => array(0=>"type",1=>"contact"),
); 

foreach($champs_sql['test'] as $key => $val)
	if(is_array($champs_sql['test'][$key]))
		for($i=0; $i<count($champs_sql['test'][$key]); $i++)
			echo "champ_sql['test']['$key']['$i'] = ".$champs_sql['test'][$key][$i]." <br/>";
	else
		echo "champ_sql['test']['".$key."'] = $val <br/>";
?>


affiche

champ_sql['test']['IDENTIFIANT'] = codecas
champ_sql['test']['ID_RESER'] = idxml
champ_sql['test']['TITLE']['0'] = contenu
champ_sql['test']['TITLE']['1'] = col_1
champ_sql['test']['CONTENU']['0'] = type
champ_sql['test']['CONTENU']['1'] = contact 
Si quelqu'un vous aide un merci et un résolu (petite case à droite de votre 1er message) !! 

Répondre à ahmet0851

8

yishay, le 20 mai 2009 à 12:05:37

Malheureusement, ça ne rentre pas les infos du xml en base.
je sèche complètement !

Répondre à yishay

9

ahmet0851, le 20 mai 2009 à 12:15:00

Là tu as bien séparé en PHP les champs des paragraphes.

Mais dans ta BDD tu dois avoir des champs différents. Sinon tu peux concaténer les deux titres et mettre un séparateur.

par exemple :

$titre_sql = "title1"."###"."title2";
echo "Chaine à insérer : $titre_sql<br/><br/>";

Donc ta base de données le champs TITRE contiendra cette chaine qui est la concaténation des deux titres des deux paragraphes.

Et quand tu veux récupérer les deux champs

$titre_recup = explode("###", $titre_sql);
echo "Titre 1 : $titre_recup[0] <br/>";
echo "Titre 2 : $titre_recup[1] <br/>";


affiche

Chaine à insérer : title1###title2

Titre 1 : title1
Titre 2 : title2


Si quelqu'un vous aide un merci et un résolu (petite case à droite de votre 1er message) !! 

Répondre à ahmet0851

10

yishay, le 20 mai 2009 à 12:30:03

En fait, c'est bien ça le problème je ne peux rien changé à part mes codes en php je suis bloqué sur toute la partie xml.
Mais n'y a t-il pas moyen de réaliser des correspondances en somme faire correspondre le premier TITLE à TITRE1 et enfin permettre l'insertion en base dans le champ 'contenu' le contenu du xml soit :" TITRE v1".

Répondre à yishay

11

ahmet0851, le 20 mai 2009 à 13:26:59

Je comprends pas ce que tu veux faire, j'ai essayé d'y répondre du mieux que je pouvais, mais là je comprends vraiment plus rien ! Si quelqu'un vous aide un merci et un résolu (petite case à ­droite de votre 1er message) !! 

Répondre à ahmet0851

12

yishay, le 20 mai 2009 à 13:42:38

Je te remercie infiniement pour ton aide.
En fait mon gros soucis est le suivant :
Je ne peux ajouter des 1 ou 2 au variables titre et contenu je suis donc bloque car si ces dernières etaient définies ainsi alors tout aurait bien fonctionné.
Aujourd'hui mon souci est de faire en sorte que le titre du paragraph 1 rentre dans le champs 'contenu' de la table.
Que le contenu du paragraphe 1 rentre dans le champs 'type'
Que le titre du paragraphe 2 rentre dans le champs 'col_1'
et enfin que le contenu du paragraphe 2 rentre dans le champs 'contact' de la table test.
La seule solution que je voyais été que le titre du paragraphe 1 devenait titre1 directement dans le php.
mais je ne sais pas comment réaliser cette correspondance qui est reproductible au contenu du paragraphe 1, titre du paragraphe 2, contenu du paragraphe 2.
Merci beaucoup dans tous les cas pour ton aide.

Répondre à yishay

13

 ahmet0851, le 20 mai 2009 à 14:07:43

Si je résume, tu as la structure suivante, je modifie le contenu pour que se soit plus clair :

<PARAGRAPHS>
   <PARAGRAPH_1>
      <TITLE>titreP1</TITLE>
      <CONTENU>contentP1</CONTENU>
   </PARAGRAPH_1>
   <PARAGRAPH_2>
      <TITLE>titreP2</TITLE>
      <CONTENU>contentP2</CONTENU>
   </PARAGRAPH_2>
</PARAGRAPHS> 


Dans ta base de données, tu as entre autres les champs 'contenu', 'type', 'col_1' et 'contact' dans la table 'test'
Tu veux mettre :
- "titreP1" dans 'contenu'
- "contentP1" dans 'type'
- "titreP2" dans 'col_1'
- "contentP2" dans 'contact'

C'est bien ça ?!

Tu n'as pas la main sur le XML ni sur la base mais uniquement sur le PHP.

Déjà ta partie PHP je ne la comprends pas du tout, ce n'est ni du SQL ni du XML...
pour moi ça ressemble plus à ça http://www.commentcamarche.net/contents/php/phpxml.php3


Si quelqu'un vous aide un merci et un résolu (petite case à droite de votre 1er message) !! 

Répondre à ahmet0851
Collection CommentÇaMarche.net