[XML] Problème pour lire l'attribut xml:lang d'un élement

Problème pour lire l'attribut xml:lang d'un élement [XML] - PHP - Programmation

Marsh Posté le 06-09-2006 à 16:26:56    

Bonjour tout le monde,
 
J'utilise actuellement simpleXml pour parser des fichiers XML, mais je suis confronté à un problème :  
 
sur un élement donné du style <element attribut1="salut" xml:lang="fr"></element>
 
Je n'arrive pas à récuperer la valeur fr qui se trouve dans xml:lang... et lorsque je liste les attributs de l'element en faisant un attributes(), il n'y a que "attribut1" qui s'affiche....
 
merci d'avance !

Reply

Marsh Posté le 06-09-2006 à 16:26:56   

Reply

Marsh Posté le 06-09-2006 à 16:38:46    

Sûrement parce que l'attribut est namespacé, non ? La méthode attributes() prend le namespace comme argument, essaye avec celui de l'XML (http://www.w3.org/XML/1998/namespace)

Reply

Marsh Posté le 06-09-2006 à 16:47:40    

J'avais pensé la même chose que FlorentG, mais après avoir fait le test sur un bête doc xml, je récupère bien la valeur malgré le changement de namespace. Montre nous ton code plutôt :)

Reply

Marsh Posté le 07-09-2006 à 11:29:08    

Bonjour à tous les 2,
 
Désolé de ne pas avoir répondu plus tôt, mais la notif par mail n'a pas fonctionné on dirais.
 
Alors voici tout d'abord un exemple de xml (le début du fichier)
 

Citation :

<?xml version="1.0" encoding="utf-8" ?>  
- <!-- This file was generated using the XSL file TIFv22toV310.xsl - Copyright © 2004 - TourinFrance
  -->  
- <tif:OI xmlns:tif="http://www.tourinfrance.net/Tourinfrance3/" xmlns:tif22="http://www.tourinfrance.net/tourinfrance22/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.tourinfrance.net/Tourinfrance3/ file:/C:/E_REFS/Tourinfrance/V3.10/Schemas/OI.xsd">
- <!-- Granule DublinCore
  -->  
- <tif:DublinCore>
  <dc:identifier>PCUAUV0630000001</dc:identifier>  
  <dc:date>03/09/1999</dc:date>  
  <dcterms:created>03/09/1999</dcterms:created>  
  <dcterms:modified>13/01/2000</dcterms:modified>  
  <tif:Classification code="02.01.11" xml:lang="fr">Patrimoine culturel</tif:Classification>  


 
On va donc dire que je veux savoir quelle est la valeur du xml:lang de la balise "Classification", j'ai donc ce code :
 

Citation :

// Chargement du fichier XML à l'aide de simpleXML
  if (!($xml = simplexml_load_file($ficheOI)))
   exit("Impossible d'ouvrir le fichier $ficheOI" );  
 $listeXml=$xml->xpath('/tif:OI/tif:DublinCore/tif:Classification');    
     
  foreach ($listeXml as $val){  
   $tmp=$val->attributes();
   
   print_r($tmp);
   
  }


 
et voici ma sortie :
 

Citation :

SimpleXMLElement Object ( [@attributes] => Array ( [code] => 02.01.11 ) )


 
donc j'ai bien l'attribut "code" qui apparait mais pas le "xml:lang" et je ne sais pas comment l'atteindre...
 
merci bcp.


Message édité par vallica le 07-09-2006 à 11:29:24
Reply

Marsh Posté le 07-09-2006 à 11:42:53    

Comme dit, en mettant le namespace de l'xml comme premier paramètre de attributes()

Reply

Marsh Posté le 07-09-2006 à 11:52:06    

je ne connais pas du tout le concept des namespace, mais effectivement ca fonctionne avec un
 

Citation :

$val->attributes("http://www.w3.org/XML/1998/namespace" );


 
j'ai bien
 

Citation :

SimpleXMLElement Object ( [@attributes] => Array ( [lang] => fr ) )


 
merci beaucoup, ca fait 2 semaines que je cherchais une solution !


Message édité par vallica le 07-09-2006 à 11:52:23
Reply

Marsh Posté le 07-09-2006 à 12:02:14    

C'est encore moi, j'ai oublié de vous demander si il existait un moyen d'accéder à cet attribut sans passer par la méthode attributes() c'est à dire en y accedant par les crochets [] sur le SimpleXMLElement directement, comme on le fait pour les attributs non-namespacés.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed