IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

javascript xml text parser [RegExp]


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    D�tails du profil
    Informations personnelles :
    �ge : 47
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Par d�faut javascript xml text parser
    hello

    je dois d�velopper un parser de xml en js, pour parser des fichiers xml g�n�r�s par MCM (media center master) qui d�crivent des films (fichiers utilis�s par WMP, XBMC, etc)

    le language est javascript, avec la version 1.7.0 de mozilla libjs, port� par mediatomb.
    je n'ai donc bien �videmment pas acc�s � window.* ni � XMLParser ni � XMLHttp.* ni � la d�finition de class(), ni de prototype, etc

    je dois faire �a en pur JS, sur une variable qui contient le contenu du fichier sans les retours chariot.
    avec un simple split j'arrive d�j� � un r�sultat encourageant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    xml_content=<?xml version="1.0" encoding="utf-8"?><movie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><title>movie title</title><originaltitle>original movie title</originaltitle><sorttitle>movie title (1995)</sorttitle><set></set><rating>7,3</rating><...><...>
     
        tags=xml_content.split('><');
        for (i in tags) {
    	print("playlist.js : tag="+tags[i]);
        }
    result :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    tag=<?xml version="1.0" encoding="utf-8"?
    tag=movie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    tag=title>movie title</title
    tag=originaltitle>original movie title</originaltitle
    tag=sorttitle>movie title (1995)</sorttitle
    tag=set
    tag=/set
    tag=rating>7,3</rating
    ...
    mais voil� je suis un informaticien et comme vous tous tr�s fain�ant, avant de continuer j'ai bien cherch� sur le net des parser xml en pur JS, j'en ai trouv� que 2 mais impossible de les adapter !

    http://www.thomasfrank.se/downloadableJS/xml2json.js
    http://wiki.unity3d.com/index.php?title=TinyXmlReader

    ils utilisent des classe et des prototypes, que j'ai transform� en fonctions ind�pendantes mais sans succ�s aucun, j'ai des erreurs diverses et vari�es.

    est-ce que quelqu'un a lui/elle m�me d�velopp� d�j� un xlml parser en pur JS ?

  2. #2
    R�dacteur/Mod�rateur

    Avatar de SpaceFrog
    Homme Profil pro
    D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activit� : D�veloppeur Web Php Mysql Html Javascript CSS Apache - Int�grateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par d�faut
    pourquoi ne pas utiliser l'existant ?
    XML se parse tr�s bien avec jquery ..
    Ma page Developpez - Mon Blog Developpez
    Pr�sident du CCMPTP (Comit� Contre le Mot "Probl�me" dans les Titres de Posts)
    Deux r�gles du succ�s: 1) Ne communiquez jamais � quelqu'un tout votre savoir...
    Votre post est r�solu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de D�veloppez !

  3. #3
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Mdr Spaffy tu as vraiment lu la question ? Pas de prototypes, pas de jQuery�

    A mon humble avis, le mieux est de parser r�cursivement � l'aide de plusieurs regex. Je refl�chis un peu et je poste une �bauche de solution tout � l'heure
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  4. #4
    Membre exp�riment�
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    128
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 128
    Par d�faut
    Le XML n'est pas un langage r�gulier, tu ne pourra jamais le parser avec une ou des expressions r�guli�res.
    De mani�re g�n�rale tout les langages qui contiennent des �l�ments balanc�s et des r�cursions non terminales ne sont pas des langages r�guliers.

    Avec une expression r�guli�re (automate d�terministe fini) tu pourra parser un langage r�gulier (niveau 3 sur l'echelle de Chomsky) comme par exemple un path SVG, mais pour les langages plus �volu�s tu aura besoin d'un �tat.

    L'approche du parser par regexp est inexorablement vou� � l'�chec, il faut partir sur un lexer (qui peut �tre fait via des regexp) et ensuite un parser qui interpretera tes lexemes.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    D�tails du profil
    Informations personnelles :
    �ge : 47
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Par d�faut
    Citation Envoy� par TheGwy Voir le message
    L'approche du parser par regexp est inexorablement vou� � l'�chec, il faut partir sur un lexer (qui peut �tre fait via des regexp) et ensuite un parser qui interpretera tes lexemes.
    tout � fait d'accord avec toi

    et justement �a tombe bien, la liste des tags des NFO g�n�r�s pour XBMC est connue :

    title, originaltitle, actor, producer, etc

    en parsant le fichier comme je viens de le faire avec libjs 1.8.0 et file.readAll() j'obtient m�me mieux : une array avec les lignes du fichier.

    en parsant chaque �l�ment pour d�tecter un mot clef, je peux r�cup�rer l'�l�ment suivant en sachant exactement quoi en faire !

    exemple de tags (bien s�r je elem.trim() avant de les traiter) :
    Code xml : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <genre>Sci-Fi</genre>
    <studio>Metro-Goldwyn-Mayer (MGM)</studio>
    <credits>John Wyndham / Stirling Silliphant / Ronald Kinnoch / Wolf Rilla</credits>
    <fileinfo></fileinfo>
    <director>Wolf Rilla</director>
    <actor>
    	<name>George Sanders</name>
    	<role>Gordon Zellaby</role>
    </actor>
    <actor>
    	<name>Barbara Shelley</name>
    	<role>Anthea Zellaby</role>
    </actor>

    finalement c pas si compliqu� ! peut �tre m�me que je pourais m'en sortir seul... en transpirant... encore que...

    faut s'accrocher avec la version 1.8.0 : string.trim() n'existe pas par exemple...

  6. #6
    Expert confirm�
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Urbaniste
    Secteur : Sant�

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par d�faut
    Citation Envoy� par scavenger Voir le message
    hello
    ...
    le language est javascript, avec la version 1.7.0 de mozilla libjs, port� par mediatomb.
    je n'ai donc bien �videmment pas acc�s � window.* ni � XMLParser ni � XMLHttp.* ni � la d�finition de class(), ni de prototype, etc

    heu le prototype c'est le coeur de javascript comment tu peux avoir un interpr�te qui ne l'a pas ???

    quant � class() �a n'existe pas en javascript.

    quant � ton probl�me il n'y a qu'une solution lire char par char ton source
    et cr�er un lexer qui doit reconnaitre la notion de tag (attention au �chappements cdata et commentaires) lorsque le lexer reconnait un token il fait appel � un analyseur sntaxique bas� sur une pile.

    j'imagine que si tu as ce genr ed'exercice c'est que tu as eu un cours sur les th�orie de la compilation et l'interpr�tation.

    A+JYT

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    D�tails du profil
    Informations personnelles :
    �ge : 47
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Par d�faut
    Citation Envoy� par sekaijin Voir le message
    j'imagine que si tu as ce genre d'exercice c'est que tu as eu un cours sur les th�orie de la compilation et l'interpr�tation.
    A+JYT
    merci et oui tu as bien devin�
    j'ai une formation compos�e de fac + dut chimie + UTC genie chimique + 6 mois de g�nie informatique, mais tous les cours que j'ai pu avoir n'ont pas �t� assez loin dans la th�orie, j'ai eu bien plus de pratique.
    Le reste je l'ai appris sur le tas, devant l'ordi, � la maison ou au boulot, et d�ailleurs je suis maintenant un expert reconnu dans l'administration JEE et je ma�trise aussi le jython et le PHP, mais encore une fois �a ne remplace pas les bases de la th�orie de la compilation.

    comme beaucoup d'"informaticiens" j'apprend au fur et � mesure, en tentant et en me r�f�rent aux sources � chaque fois que j'ai besoin d'une ligne de code suppl�mentaire que j'imagine possible.
    Ca ne remplacera jamais les cours essentiels que j'ai pu manquer.

    c'est �a qu'il y a de bien et de pas bien dans le monde de l'informatique :
    1) la passion permet de devenir quelqu'un voir de se faire passer pour expert, sans formation.
    2) des margoulins peuvent aussi se faire passer expert et tromper leur monde, j'en croise r�guli�rement.

    Avec d'autres m�tiers tout aussi techniques comme l'�b�nisterie ou la boulangerie, �a ne marcherai pas.

    sais tu quelle universit� ou quel IUT me conseiller et � quels cours en particulier je pourrais m'incruster pour apprendre l'essentiel de ce qui me manque ? Ce sont des cours en d�but d'ann�e je suppose ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    D�tails du profil
    Informations personnelles :
    �ge : 47
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Par d�faut
    bon et bien comme on est jamais mieux servi que par soi-m�me, voici la r�ponse que j'attendais, qui m'aurait fait gagner une journ�e et �conomiser mes pauvres yeux devant l'�cran. Je pense qu'elle servira � d'autres.

    0) extrait exemple de XML � lire, g�n�r� par des media manager comme MCM ou media companion, compatibles avec XBMC, peecko, serviio, etc :
    Code xml : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?xml version="1.0" encoding="utf-8"?>
    <movie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <title>title</title>
    <genre>Sci-Fi</genre>
    <studio>Metro-Goldwyn-Mayer (MGM)</studio>
    <credits>John Wyndham / Stirling Silliphant / Ronald Kinnoch / Wolf Rilla</credits>
    <emptytag></emptytag>
    <director>Wolf Rilla</director>
    <actor>
    	<name>George Sanders</name>
    	<role>Gordon Zellaby</role>
    </actor>
    <actor>
    	<name>Barbara Shelley</name>
    	<role>Anthea Zellaby</role>
    </actor>
    (...)

    On constate d'abord que :
    a) certains tags sont vides
    b) certains tags contiennent n sous-tags dont le nombre est connu

    il faut donc pour lire ce type sp�cifique de XML avec JS 1.8.0 les fonctions suivantes (la version est importante car des prototypes comme trim() n'existent pas sous cette version) :

    1a) libjs compil� avec JS_HAS_FILE_OBJECT=1 :
    fonction pour retourner chaque ligne du xml dans une array
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function getArrayFromNfoFile(xmlFilePath)
    {
    var file = new File(xmlFilePath);
    if (file.exists) {
    	file.open("read", "text");
    	xml_array = file.readAll();
    	file.close();
    	return xml_array;
    } else return null;
    }
    1b) autre solution : fonction identique mais en sachant que le contenu du fichier a �t� post� comme argument au script contenant cette fonction (comportement classique du script playlist.js de mediatomb) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function treat_nfo()
    {
        var xml_array = [];
        var line = readln();
        do
        {
    	xml_array.concat(line);
    	line = readln();
        }
        while (line);
        return xml_array;
    }
    2) fonction pour g�n�rer un object "Actor" qui contient 2 ou + propri�t�s, pour les tags qui contiennent des sous-tags :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    function Actor(name, role)
    {
        this.name = name;
        this.role = role;
    }
    3) fonction pour parser chaque ligne de l'array
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    function parseNfoArray(xml_array)
    {
    	if (!xml_array) return null;
    	var movie = new Object();
    	movie.actors = [];
    	// remember we don't want the first line
    	for (i = 2; i < xml_array.length; i++)
    	{
    		// http://jsperf.com/exec-vs-match-vs-test/3
    		// http://www.pagecolumn.com/tool/regtest.htm
    		// http://stackoverflow.com/users/121483/sjuul-janssen
    		// myArray = '<id moviedb="imdb">xxx</id>'.match(/(<[^>]+>)([^<]+)(<[^>]+>)/); will result in :
    		// myArray[0] = "<id>xxx</id>"
    		// myArray[1] = "<id>"
    		// myArray[2] = "xxx"
    		// myArray[3] = "</id>"
     
    		// if the xml tag is empty, myArray is empty :
    		tag = xml_array[i].match(/(<[^>]+>)([^<]+)(<[^>]+>)/);
    		// if tag is empty, maybe it's a multiple sub-tags case :
    		if (!tag) tag = xml_array[i].match(/\s+<(\w+)>$/);
    		if (!tag) continue;
    		switch (tag[1])
    		{
    		case '<title>':
    			movie.title= tag[2];
    			break;
    		case '<anytag>':
    			movie.anytag= tag[2];
    			break;
    		case (...)
     
    		case 'actor':
    			// tag with sub-tags whose sub-tags quantity is known : 
    			i++;
    			tag = xml_array[i].match(/(<[^>]+>)([^<]+)(<[^>]+>)/);
    			if ('<name>' == tag[1]) name = tag[2]; else role = tag[2];
    			i++;
    			tag = xml_array[i].match(/(<[^>]+>)([^<]+)(<[^>]+>)/);
    			if ('<role>' == tag[1]) role = tag[2]; else name = tag[2];
    			movie.actors.push(new Actor(name, role));
    			break;
    		default:
    			break;
    		}
    	}
    	return movie;
    }
    et voil� il suffisait de faire un case avec les tags que l'on veut traiter, et on obtient un objet avec des propri�t�s repr�sentant les tags r�cup�r�s.
    pour les multi-tags la propri�t� repr�sente une array qu'il suffit de parser ainsi :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    while (movie.actors.length > 0) {actor = movie.actors.shift(); doSmthgWith(actor);}
    merci � ceux qui ont tent� de m'expliquer ou de m'aider

  9. #9
    Expert confirm�
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Urbaniste
    Secteur : Sant�

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par d�faut
    comme on te l'expliquait cette fa�on de faire ne peut garantir un fonctionnement avec tout fragment XML MCM ou pas
    par exemple tu traite <title>title</title> or le tag title peut s'�crire
    Code xml : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    <title
       sommeAttribute="a value" xmlns:any="http://any.org/schema/"
       any:anyAttribute="other value"
    >title<any:anyTag>any Value</any:anyTag></title>
    cette d�finition est tout a fait valide pour le tag title mais ton parser ne sera pas capable de le d�tecter.

    dans le m�me ordre d'id�e mais beaucoup plus courant et simple
    <emptytag></emptytag> est �quivalent � <emptytag /> ou encore <emptytag/> ou <emptytag ></emptytag> etc.

    tu vois donc qu'utiliser une regexp est tr�s r�ducteur.

    le fonctionnement d'un parser xml est normalement fait ainsi
    lecture char par char (via un buffer) tant que le caract�re lu est un witespace
    passer au suivant. lorsque le on rencontre < on garde un indicateur comme quoi on entre dans un tag les caract�res lus suivant jusqu'au premier witespace ou / ou > constituent le non du tag. si on a eu witespace, on continue � passer les caract�res en revue pour lire les attributs
    avec le m�me principe si on a un / on doit avoir un > on a donc d�tect� un tag vide la suite doit �tre un nouveau tag (ou du texte si c'est un xml mixte comme le XHTML). si on a eu un > on a detect� un tag ouvrant on garde un indicateur comme quoi on est dans un tag ouvert la suite sera son contenu.

    ce fonctionnement est celui d'un analyseur lexical pour xml tu vois qu'il lui faut garder des indicateurs pour savoir si � la position de l'analyse tu est
    hors d'un tag,
    dans un tag
    en cours de lecture d'un nom de tag ouvrant (ou vide)
    en cours de lecture d'un nom d'attribut,
    en cours de lecture d'une valeur d'attribut.
    en cours de lecture d'un nom de tag fermant

    � chaque fois que l'analyseur lexical trouve un tag ouvrant, un text, tag fermant. il appelle un analyseur syntaxique.
    lui va devoir g�r� une pile pour garder un contexte des tag ouvert et pas encore ferm�. ainsi lorsqu'il rencontrera un tag fermant il saura si la syntaxte est correcte. entre le tag ouvrant et le tag fermant il poura constituer une repr�sentation d'objet en memoire correspondant � l'analyse.

    Ce fonctionnement que ce soit en js c c++ java pascal ou tout autre langage est le seul qui te garantira que ton XML est correctement lu s'il est conforma � la norme et ce quelque soit la fa�on don l'auteur l'a �crit.

    Utiliser un syst�me de regexp r�duit drastiquement la fa�on dont on doit �crire le xml pour qu'il soit pars� correctement.
    pour moi cette approche n'est jouable que si le xml en question est produit par un outil unique dont on maitrise le g�n�rateur.
    si l'outil est un outil venu de l'ext�rieur on n'a aucune garanti que lors d'une ��volution il ne produira pas un XML incompatible avec le parseur � base de regexp.

    si tu utilise un parseur qui se concentre sur la norme XML alors tu as la garantie que quelque soit l'outil quelque soit sa version � partir du moment ou il produit un xml standard ton parseur saura le lire.

    A+JYT

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    D�tails du profil
    Informations personnelles :
    �ge : 47
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Par d�faut
    Citation Envoy� par sekaijin Voir le message
    Utiliser un syst�me de regexp r�duit drastiquement la fa�on dont on doit �crire le xml pour qu'il soit pars� correctement.
    pour moi cette approche n'est jouable que si le xml en question est produit par un outil unique dont on maitrise le g�n�rateur.
    si l'outil est un outil venu de l'ext�rieur on n'a aucune garanti que lors d'une �volution il ne produira pas un XML incompatible avec le parseur � base de regexp.
    A+JYT
    oui on est bien d'accords l� dessus.
    et c'est justement le cas des media managers et notamment de celui qui m'int�resse : MCM.
    Ils produisent des XML norm�s pour tel ou tel client ( MediaBrowser, XBMC, Boxee, Netgear NeoTV, pyTiVo and more! ). Ces normes �voluent effectivement selon les clients : XBMC par exemple en poss�de 3 : <v10, v10-11, v12, mais l� encore seuls les tags s'enrichissent, leur format ne change que tr�s peu.

    Citation Envoy� par sekaijin Voir le message
    dans le m�me ordre d'id�e mais beaucoup plus courant et simple
    <emptytag></emptytag> est �quivalent � <emptytag /> ou encore <emptytag/> ou <emptytag ></emptytag> etc.
    ces tags n'existent pas dans les XML g�n�r�s par l'outil que j'utilise, j'aurais d� le pr�ciser.

    Le parser par regexp me convient tr�s bien et reste l�ger : sur mon NAS (atom D2550) le traitement d'un seul XML (8Ko, 300 lignes) avec libjs prend moins d'1 seconde).

    le but de l'exercice n'�tait pas de d�velopper un parser parfait pour la norme XML mais un parser l�ger pour un cas tr�s pr�cis de XML. Si �volution du contenu il y a, j'�voluerai le code et rediffuserai le module tr�s facilement.

    car il faut bien faire l'�quilibre entre fonctionnalit�s et lourdeur de d�veloppement + traitement. Sans oublier que la machine derri�re c'est un NAS, pas un calculateur avec des i7 en cluster...
    1 seconde pour traiter un XML de 300 lignes c'est peu mais c'est beaucoup aussi compar� � nos PC modernes... parser caract�re par caract�re ne me dit pas que c'est moins lourd que ma solution ?

  11. #11
    Membre exp�riment�
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    128
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 128
    Par d�faut
    Ce que tu veux faire c'est plus de l'extraction d'information qu'un vrai parser.
    Apr�s c'est un choix comme un autre, mais il faut �tre conscient que tu contracte une dette technique : cela peut vite devenir un enfer de maintenance si le code doit grossir et rester en fonction longtemps.
    Ne fais pas trop de conscession comme �a car ce n'est pas sain sur le long terme.


    "parser caract�re par caract�re ne me dit pas que c'est moins lourd que ma solution ?"

    Si �a l'est :

    Car quant tu vas faire ton parser, tu vas avoir une premi�re �tape, le lexer qui va te r�cup�rer tout tes lexemes, c'est � ce moment la que tu vas lire ton fichier caract�re par caract�re... et ce sera la seule et unique fois !

    Avec les expressions r�guli�res, tu vas parcourir ton fichier � chaque expression jusqu'� ton match, et pour peu que ton expression ne soit pas tr�s bien �crite tu peux avoir beaucoup de backtracking assez couteux.

  12. #12
    Membre confirm�
    Avatar de Shinja
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 153
    Par d�faut
    Salut, je me permet de contribuer � ce topic qui m'a �t� vraiment tr�s utile pour mettre au point une organisation tr�s pouss�e de mon serveur UPNP sur Squeeeze. J'ai adapt� le script � mes besoins et j'ai trouv� une solution qui mettra tout le monde d'accord :

    Mettre en place une interface web en PHP/JQUERY afin de cr�er dynamiquement des XML contenant les donn�es souhait�es, le tout sauvegarder dans un dossier /.metas. Par la suite, le script va r�cup�rer le fichier XML correspondant au film et utiliser les donn�es pour organiser les fichiers. En revanche, si un film ne dispose pas de fichier XML, il va tent� de lire les metas incrust�s dans le fichier ce que mon interface web fait avec ffmpeg.

    Et dans le pire des cas, si rien, il met uniquement le fichier dans un r�pertoire virtuel "inconnus". L� o� je s�che pour rendre le code dynamique c'est avec les subnode... Je n'ai pas trouv� de m�thode pour r�cup�rer le nombre de sous node <name>value</name> dans un node <actors> par exemple ou <studios> etc. J'ai test� pas mal de choses, mais je ne vois pas trop (...). Donc un petit coup de pousse ne serait pas de trop. Voici le bout de code o� je s�che :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    case 'studio':
             for(a = 0; a < 3 ; a++){
    		i++
    		tag = xml_array[i].match(/(<[^>]+>)([^<]+)(<[^>]+>)/);
    		if ('<name>' == tag[1]) name = tag[2];
    			movie.studios.push(name);
    	}
    	break;
    Merci !
    y
    Edit : J'ai essay� tag.length mais il me renvoie toujours 4...

  13. #13
    Membre confirm�
    Avatar de Shinja
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2012
    Messages : 153
    Par d�faut
    Bon bah finalement, j'ai trouv� tout seul comme un grand. La solution la plus simple et la plus �vidente �tait d'ajouter le nombre d'acteurs ou autre dans un node puis de le r�cup�rer.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [JAVASCRIPT - XML] parser sous IE
    Par Hitchou dans le forum G�n�ral JavaScript
    R�ponses: 10
    Dernier message: 24/02/2010, 16h41
  2. [Javascript][XML]
    Par kirk80 dans le forum G�n�ral JavaScript
    R�ponses: 6
    Dernier message: 30/07/2009, 12h08
  3. R�ponses: 4
    Dernier message: 11/12/2007, 11h59
  4. [XML] Comment parser ?
    Par GLDavid dans le forum Modules
    R�ponses: 7
    Dernier message: 03/03/2005, 02h59
  5. R�ponses: 4
    Dernier message: 07/05/2004, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo