Parsing xml - souci de parsing
yishay
-
Utilisateur anonyme -
Utilisateur anonyme -
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",
);
?>
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",
);
?>
A voir également:
- Parsing xml - souci de parsing
- Xml viewer - Télécharger - Édition & Programmation
- Office xml handler - Télécharger - Traitement de texte
- Driveimage xml - Télécharger - Sauvegarde
- XML parsing error lors d'une réponse - Forum Gmail
- Txt en xml - Forum Programmation
6 réponses
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 ??
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 ??
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
<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
Je fais un petit test
m'affiche
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:
<?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>
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 ?
$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 ?
J'ai fais ça et ça marche
affiche
Au lieu des paragraphe_x comme argument tu peux aussi utiliser des nombres
affiche
<?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
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 :
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
affiche
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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".
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".
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.
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.
Si je résume, tu as la structure suivante, je modifie le contenu pour que se soit plus clair :
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 https://www.commentcamarche.net/contents/805-php-parser-du-xml
<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 https://www.commentcamarche.net/contents/805-php-parser-du-xml
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.
<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