Rechercher : dans
Par :

PHP5 et XML, parser en fonction de l'attribut

Dernière réponse le 12 fév 2008 à 15:22:24 sly-bzh, le 12 fév 2008 à 11:37:12 
 Signaler ce message aux modérateurs

Bonjour à tous et toutes,

Je viens vous voir avec un prblème sur lequel je bute depuis maintenant plus d'une heure.
Voilà j'ai un fichier XML (accessible en entier ici http://beta.uniprot.org/uniprot/A0A373.xml ) de la forme suivante :

-<uniprot xsi:schemaLocation="http://uniprot.org/uniprot http://www.uniprot.org/support/docs/uniprot.xsd">
  -<entry dataset="Swiss-Prot" created="2007-02-06" modified="2007-10-02" version="5">
    <accession>A0A373</accession>
    <name>RK16_COFAR</name>
    ...
    -<comment type="subunit">
        <text>Part of the 50S ribosomal subunit.</text>
    </comment>
    -<comment type="subcellular location">
        <text>Plastid, chloroplast.</text>
    </comment>
    ...
  </entry>
</uniprot>


Oui je sais c'est de la bio mais n'ayez pas peur, je ne vous parlerais pas de bio je le jure !

Ce que je souhaiterais faire c'est récupérer ce qu'il y a entre les balises <text> lorsque l'attribut de la balise <comment> est "subcellular location".

Je pense que c'est assez clair mais si vous voulez plus d'infos, n'hésitez pas, je suis là

D'avance merci
Proverbes breton :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps
Configuration: Windows XP
Firefox 2.0.0.12

Meilleures réponses pour « PHP5 et XML, parser en fonction de l'attribut » dans :
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

Thamior, le 12 fév 2008 à 11:41:29

Bonjour,

Tu peux y arriver en utilisant le DOM.

Regarde sur ce site : http://fr.php.net/dom tu as toutes les fonctions du DOM pour le faire.

Thamior.

Répondre à Thamior

2

sly-bzh, le 12 fév 2008 à 11:48:45

J'étais pluôt parti pour utiliser le simplexml et j'avais déja "créé" ça (oui je sais j'ai oublié de le mettre dans le premier post...)

$xml = simplexml_load_file('http://beta.uniprot.org/uniprot/A0A373.xml');
$subcellular_location = $xml->entry[0]->comment['value="subcellular location"']; 
echo "<BR /> la localisation subcellulaire de la protéine est : ".$subcellular_location;

Mais évidemment ça marche pas sinon je serais pas ici XD

Simplexml m'avait l'air plus simple à utiliser que le DOM mais bon je vais voir avec le DOM
Merci Proverbes breton :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps

Répondre à sly-bzh

3

Thamior, le 12 fév 2008 à 11:52:35

En faite, SimpleXML c'est du DOM mais en très simplifié.

J'ai fait un code quasi similaire à ce que tu veux faire et j'ai été obligé d'utiliser le DOM.

Le DOM est plus complet, tu devrais donc trouver toutes les fonctions dont tu as besoin.

Thamior.

Répondre à Thamior

4

sly-bzh, le 12 fév 2008 à 14:35:02

Etant donné que je ne suis pas Breton pour rien, je me suis entêté avec simplexml (je l'avoue ce n'est pas tant parce que je suis tétu que parce que je suis fainéant et DOM me faisait peur....)
Donc voilà ce que j'ai trouvé et surtout ce que j'ai réussi à faire.

$xml = simplexml_load_file('http://beta.uniprot.org/uniprot/A0T0M2.­xml');
foreach($xml->entry[0]->comment as $comment)
{
	switch((string) $comment['type']){
		case 'subcellular location':
			$location=$comment->text;
			echo "<BR /> la localisation subcellulaire de la protéine est : ".$location;
			if ($location == '%chloroplast%')
				{$nbre_chloro++;}
			break;
	}
}


Certes, ça marche mais bon j'aurais aimé savoir s'il était possible de le faire sans passer par une boucle foreach parceque j'ai inclus ça dans un script assez lourd, il doit aller chercher des infos sur environ 100 000 protéines donc je cherche toutes les possibilités pour accélérer tout ça.
Si c'est possible de le faire sans boucle tant mieux mais sinon tant pis, je suppose que de toutes façon ce n'est pas tant que ça la boucle qui va ralentir, étant donné qu'il va chercher le xml sur un site éloigné.

Merci de votre réponse Proverbes breton :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps

Répondre à sly-bzh

5

Thamior, le 12 fév 2008 à 15:16:24

Je ne connais pas d'autres boucles pour utiliser le DOM que le foreach...

Je ne peux pas t'aider plus... désolé...

Thamior.

Répondre à Thamior

6

 sly-bzh, le 12 fév 2008 à 15:22:24

Pas de problème. De toutes façon maintenant que c'est parti j'en ai pour quelques dizaines d'heures et une fois que ce sera fait je n'aurais plus à le refaire...
Merci qund même ! Proverbes breton :
Si les mouettes ont pied, il est temps de virer
Il vaut mieux être saoul que con, ça dure moins longtemps

Répondre à sly-bzh