Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/08/2007, 18h32   #1
Invité de passage
 
Inscription : août 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 2
Points : 0
Points : 0
Par défaut [SimpleXML] Récupérer contenu d'une balise XML contenant du HTML

Bonjour,
Mon problème est le suivant : j'aimerais récupérer le contenu d'une balise XML afin de l'insérer dans ma base MySQL mais celle-ci contient de la mise en forme HTML (<B>,<I>,etc....).
Le problème est que ces balises HTML sont interprété comme des balises XML et je n'arrive pas a les importer.

Voici un extrait du code XML que je souhaite exploiter :
Code XML :
1
2
3
4
5
6
7
<RUBRIQUE>
    <TEXTE>
        <PAR>Les pontons de Wolfeboro sont déjà loin. Rentré, dimanche 19 août, sur un vol régulier d'Air France Boston-Paris.......<BR/><BR/>
Sans attendre le conseil des ministres de vendredi,<I>" Attendez-vous à ce que cela reparte très fort à la rentrée "</I>, avait.....
        </PAR>
    </TEXTE>
</RUBRIQUE>

Voici mon code pour récupérer le coontenu de la balise <TEXTE> :
Code :
1
2
3
4
5
6
$racine = simplexml_load_file($Chemin);
foreach($racine->RUBRIQUE as $Rubrique)
{
   $Rubrique = $racine->RUBRIQUE;
   $article = $Rubrique -> xpath('//TEXTE');
}
Lorsque j'affiche $article :
echo $article[0];

Le texte contenu entre <I> et fin de </I> n'est pas récupérer.

Auriez-vous une solution? Quitte a modifier le contenu du fichier XML avant de l'exploiter mais je ne sais pas comment faire.

Par avance merci.

Sam
samichon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 09h12   #2
Membre émérite
 
Inscription : décembre 2003
Messages : 782
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 782
Points : 821
Points : 821
as tu essayer avec un xpath du grenre
//TEXTE/*
?
sinon les balises, entre les balises TEXTE, t'intéresse ou tu ne souhaites avoir que le text compris entre les balises?
fraoustin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 10h59   #3
Invité de passage
 
Inscription : août 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 2
Points : 0
Points : 0
Merci de ta réactivité,

En fait je souhaite récupérer tout le contenu de la balise <TEXTE> ainsi que tout les noeud enfant de celle-ci.

En effet j'ai essayer avec :
- $article = $Rubrique -> xpath("//TEXTE/*");
- $article = $Rubrique -> xpath("//TEXTE/descendant::*");

Mais cela ne me permet pas de récuperer non plus le contenu de la balise <I>.

Me serait-il possible de faire une modification du fichier ".xml" en amont? (en supprimant totalement les balises : <B>,<I>,<FONT......).

Si oui, aurais tu une solution?

Merci d'avance.

Sam
samichon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 14h24   #4
Membre émérite
 
Inscription : décembre 2003
Messages : 782
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 782
Points : 821
Points : 821
A mon avis oui avec un xsl comme cela
Code XML :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output 
  		encoding="ISO-8859-15"
  		method="xml"
  		indent="yes" />
 
	<xsl:template match="node() | @*">
		<xsl:value-of select=".">
		<xsl:apply-templates select="@* | node()"/>
	</xsl:template>
        <xsl:template match="RUBRIQUE | TEXTE">
		<xsl:copy>
			<xsl:apply-templates select="@* | node()"/>
		</xsl:copy>
	</xsl:template>
</xsl:stylesheet>
fraoustin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2007, 08h36   #5
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Bonjour,

ce n'est pas XPath qui est en cause mais SimpleXML : il ne gère tout simplement pas les contenus mixtes (mélange de texte et de balises), c'est une de ses grosses limitations. La seule solution est de passer par un filtrage en aval, avec une feuille de style telle celle proposée par fraoustin.
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h27.


 
 
 
 
Partenaires

Hébergement Web