Récupérer une seule balise d'un XML
StringTheory
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
jeremy.s Messages postés 1226 Date d'inscription Statut Membre Dernière intervention -
jeremy.s Messages postés 1226 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un fichier xml à parser à l'aide d'un code PHP.
Le problème est qu'il possède 3 balises "description" à différents endroits du fichier, j'affiche les 3 alors que je ne veux afficher que les 2 premières.
Je ne sais comment faire. Merci de votre aide.
J'ai un fichier xml à parser à l'aide d'un code PHP.
Le problème est qu'il possède 3 balises "description" à différents endroits du fichier, j'affiche les 3 alors que je ne veux afficher que les 2 premières.
Je ne sais comment faire. Merci de votre aide.
A voir également:
- This page contains the following errors: error on line 1 at column 1: start tag expected, '<' not found below is a rendering of the page up to the first error.
- Comment recuperer un message supprimé sur whatsapp - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Xml download - Télécharger - Édition & Programmation
- Comment récupérer un compte facebook piraté - Guide
- Comment recuperer une video sur youtube - Guide
20 réponses
Salut !
https://www.php.net/manual/fr/simplexmlelement.construct.php
Donc :
$xml = new SimpleXMLElement('monfichier.xml');
print_r($xml->description[0]);
print_r($xml->description[1]);
https://www.php.net/manual/fr/simplexmlelement.construct.php
Donc :
$xml = new SimpleXMLElement('monfichier.xml');
print_r($xml->description[0]);
print_r($xml->description[1]);
Merci de ta réponse. Cependant en testant ton code je reçois l'erreur suivante:
This page contains the following errors:
error on line 11 at column 3: Extra content at the end of the document
Below is a rendering of the page up to the first error.
This page contains the following errors:
error on line 11 at column 3: Extra content at the end of the document
Below is a rendering of the page up to the first error.
Salut !
Je ne connais pas spécialement l'objet,, mais envois la structure de ton fichier xml :)
Je pense qu'il faut d'abord prendre les balises du noeud au dessus de description, si il y en a !
Je ne connais pas spécialement l'objet,, mais envois la structure de ton fichier xml :)
Je pense qu'il faut d'abord prendre les balises du noeud au dessus de description, si il y en a !
EDIT:
J'ai maintenant une page rempli d'erreur avec des tableaux de variables ci dessous:
Warning: SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: Entity: line 1: parser error : Start tag expected, '<' not found in C:\wamp\www\tests\example02.php on line 4
Warning: SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: france_0514540.xml in C:\wamp\www\tests\example02.php on line 4
Warning: SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: ^ in C:\wamp\www\tests\example02.php on line 4
Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\wamp\www\tests\example02.php on line 4
( ! ) Exception: String could not be parsed as XML in C:\wamp\www\tests\example02.php on line 4
Voila les 5 erreurs que j'obtiens. C'est pire ! :)
J'ai maintenant une page rempli d'erreur avec des tableaux de variables ci dessous:
Warning: SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: Entity: line 1: parser error : Start tag expected, '<' not found in C:\wamp\www\tests\example02.php on line 4
Warning: SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: france_0514540.xml in C:\wamp\www\tests\example02.php on line 4
Warning: SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: ^ in C:\wamp\www\tests\example02.php on line 4
Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\wamp\www\tests\example02.php on line 4
( ! ) Exception: String could not be parsed as XML in C:\wamp\www\tests\example02.php on line 4
Voila les 5 erreurs que j'obtiens. C'est pire ! :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ah bah il trouve pas ton fichier .xml
Ou ya un probleme avec. Il est bien dans le même dossier que ton fichier php ?
Essaye :
$xml = new SimpleXMLElement('urldufichier.xml', NULL, TRUE);
Ou ya un probleme avec. Il est bien dans le même dossier que ton fichier php ?
Essaye :
$xml = new SimpleXMLElement('urldufichier.xml', NULL, TRUE);
J'ai trouvé dla doc en plus : http://www.w3schools.com/php/php_xml_simplexml.asp
Regarde les exemples et essaye avec ton cas
Regarde les exemples et essaye avec ton cas
J'ai essayé en remplaçant avec ton bout de code; j'obtiens ces erreurs-là :
( ! ) Warning: SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: I/O warning : failed to load external entity "france-0514540.xml" in C:\wamp\www\tests\example02.php on line 4
( ! ) Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\wamp\www\tests\example02.php on line 4
( ! ) Exception: String could not be parsed as XML in C:\wamp\www\tests\example02.php on line 4
Oui le fichier XML est dans le même répertoire que mon fichier php..
Dans mes recherches, j'ai essayé aussi SimpleXML_Load_File mais le résultat est le même...
Je précise que dans le XML l'arborescence est assez complexe: Une balise channel contient plusieurs balises item et dans chaque balise item il y a une balise description.
( ! ) Warning: SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: I/O warning : failed to load external entity "france-0514540.xml" in C:\wamp\www\tests\example02.php on line 4
( ! ) Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in C:\wamp\www\tests\example02.php on line 4
( ! ) Exception: String could not be parsed as XML in C:\wamp\www\tests\example02.php on line 4
Oui le fichier XML est dans le même répertoire que mon fichier php..
Dans mes recherches, j'ai essayé aussi SimpleXML_Load_File mais le résultat est le même...
Je précise que dans le XML l'arborescence est assez complexe: Une balise channel contient plusieurs balises item et dans chaque balise item il y a une balise description.
Le problème est vraiment avec ton fichier .xml ...
failed to load external entity "france-0514540.xml"
Essage un truc du genre :
$x = "<personne><nom>dupond</nom><prenom>jean</prenom></personne>"
$xml = new SimpleXMLElement($x);
echo $xml->personne->nom;
failed to load external entity "france-0514540.xml"
Essage un truc du genre :
$x = "<personne><nom>dupond</nom><prenom>jean</prenom></personne>"
$xml = new SimpleXMLElement($x);
echo $xml->personne->nom;
Attends, j'avais fait une erreur de frappe et en utilisant la ligne de code que tu m'avais donné avec NULL et TRUE, maintenant c'est une écran blanc qui s'affiche..
Je ne comprends pas le code que tu m'as donné en dernier..
Je ne comprends pas le code que tu m'as donné en dernier..
Ah bah voilà donc il a trouvé ton fichier cool !
Alors mtn après ce que tu m'as dit :
"Une balise channel contient plusieurs balises item et dans chaque balise item il y a une balise description."
Peux tu copier coller une partie de ton fichier xml pour voir la structure précise stp !
Alors mtn après ce que tu m'as dit :
"Une balise channel contient plusieurs balises item et dans chaque balise item il y a une balise description."
Peux tu copier coller une partie de ton fichier xml pour voir la structure précise stp !
Pas de soucis:
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Voila Météo Reims]]></title>
<description><![CDATA[Voila Météo]]></description>
<language>fr-fr</language>
<copyright>Voila</copyright>
<generator>METEO</generator>
<pubDate>Mon, 13 May 2013 00:00:01 GMT</pubDate>
<lastBuildDate>Mon, 13 May 2013 12:38:20 +0200</lastBuildDate>
<link>https://meteo.orange.fr/
<ttl>60</ttl>
<item>
<date>lundi 13 mai 2013</date>
<title><![CDATA[lundi 13 mai 2013 après-midi : 16°]]></title>
<description>
<![CDATA[
lundi 13 mai 2013<br/>
<font face="Arial" size="2" color="#444">
<table border="0" cellpadding="0" cellspacing="2">
<tr>
<td>
<img src="https://meteo.orange.fr/" width="40" height="40" border="0" />
</td>
<td valign="middle" align="center" style="vertical-align:middle">
<font size="4" color="#222288" style="line-height:25px;"><b>16 °</b></font><br />
<font face="Arial" size="2" color="#444">Rares averses<br />Vent : <b>20 km/h</b></font>
</td>
</tr>
</table><br/>
<b>Prévisions</b> à <a href="https://meteo.orange.fr/">10 jours</a><br /></font>
]]>
</description>
Je veux récupérer les informations météo qu'il y a dans la balise description à la fin. ( je n'ai pas pris la suite du xml c'est inutile )
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Voila Météo Reims]]></title>
<description><![CDATA[Voila Météo]]></description>
<language>fr-fr</language>
<copyright>Voila</copyright>
<generator>METEO</generator>
<pubDate>Mon, 13 May 2013 00:00:01 GMT</pubDate>
<lastBuildDate>Mon, 13 May 2013 12:38:20 +0200</lastBuildDate>
<link>https://meteo.orange.fr/
<ttl>60</ttl>
<item>
<date>lundi 13 mai 2013</date>
<title><![CDATA[lundi 13 mai 2013 après-midi : 16°]]></title>
<description>
<![CDATA[
lundi 13 mai 2013<br/>
<font face="Arial" size="2" color="#444">
<table border="0" cellpadding="0" cellspacing="2">
<tr>
<td>
<img src="https://meteo.orange.fr/" width="40" height="40" border="0" />
</td>
<td valign="middle" align="center" style="vertical-align:middle">
<font size="4" color="#222288" style="line-height:25px;"><b>16 °</b></font><br />
<font face="Arial" size="2" color="#444">Rares averses<br />Vent : <b>20 km/h</b></font>
</td>
</tr>
</table><br/>
<b>Prévisions</b> à <a href="https://meteo.orange.fr/">10 jours</a><br /></font>
]]>
</description>
Je veux récupérer les informations météo qu'il y a dans la balise description à la fin. ( je n'ai pas pris la suite du xml c'est inutile )
PS: quand je teste le code
<?php
$xml = new SimpleXMLElement('france_0514540.xml', NULL, TRUE);
print_r($xml->description);
?>
J'obtiens une page blanche avec seulement écrit "SimpleXMLElement Object ( )"
<?php
$xml = new SimpleXMLElement('france_0514540.xml', NULL, TRUE);
print_r($xml->description);
?>
J'obtiens une page blanche avec seulement écrit "SimpleXMLElement Object ( )"
Ok ok donc la balise descriptions de chaque <item> c'est ca ?
Ya un bon exemple je trouve ici http://www.w3schools.com/php/php_xml_simplexml.asp
Moi je testerai :
foreach($xml->item as $item)
{
echo $item->asXML(); // Ca te récupère en string le contenu, et j'ai vu que c'était un tableau donc si tu voulais gardé la structure tableau ca devrait le faire
}
Ya un bon exemple je trouve ici http://www.w3schools.com/php/php_xml_simplexml.asp
Moi je testerai :
foreach($xml->item as $item)
{
echo $item->asXML(); // Ca te récupère en string le contenu, et j'ai vu que c'était un tableau donc si tu voulais gardé la structure tableau ca devrait le faire
}
Je vais étudier le lien que tu m'as envoyé.
En suivant tes conseils, j'execute ce code:
<?php
$xml = new SimpleXMLElement('france_0514540.xml', NULL, TRUE);
foreach($xml->item as $item)
{
echo $item->asXML();
}
?>
Mais là une pageblanche s'affiche.
En suivant tes conseils, j'execute ce code:
<?php
$xml = new SimpleXMLElement('france_0514540.xml', NULL, TRUE);
foreach($xml->item as $item)
{
echo $item->asXML();
}
?>
Mais là une pageblanche s'affiche.
Je sais pas exactement comment me servir d'un foreach, sachant que je veux une balise bien particulière et pas une série de balise..
Essaye en rentrant dans channel d'abord, voir dans la base rss encore au dessus, mais vu que ya des espaces jsais pas trop comment rentré dedans ... peut être avec le children() de l'exemple du lien. A voir !
$xml = new SimpleXMLElement('france_0514540.xml', NULL, TRUE);
foreach($xml->channel->item as $item)
{
echo $item->asXML();
}
$xml = new SimpleXMLElement('france_0514540.xml', NULL, TRUE);
foreach($xml->channel->item as $item)
{
echo $item->asXML();
}
Ah c'est mieux ! La première balise description ne s'affiche plus. cependant une troisième balise description située dans une antre balise "item" s'affiche..
J'avais pensé à un ciblage à la ligne près, ou bien à une extraction de balise..
J'avais pensé à un ciblage à la ligne près, ou bien à une extraction de balise..
Ah bah oui la tu auras les descriptions de chaque balise item ! Donc si tu veux seulement la première c'est plus simple, pas besoin de foreach !
echo $xml->channel->item[0]->asXML();
echo $xml->channel->item[0]->asXML();
J'ai résolu ce problème en rajoutant [0] à la fin de la balise description dans ton code.
Ca s'annonce plutôt bien, tu m'as beaucoup aidé et je t'en remercie ! J'ai encore un double crochet qui s'affiche à enlever et ce sera bon.
Ca s'annonce plutôt bien, tu m'as beaucoup aidé et je t'en remercie ! J'ai encore un double crochet qui s'affiche à enlever et ce sera bon.