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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Points : 34
    Points
    34
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 670
    Points
    66 670
    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 éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    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 actif
    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
    Points : 210
    Points
    210
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Points : 34
    Points
    34
    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 éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Points : 34
    Points
    34
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Points : 34
    Points
    34
    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 éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Points : 34
    Points
    34
    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 actif
    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
    Points : 210
    Points
    210
    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 habitué
    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
    Points : 156
    Points
    156
    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 habitué
    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
    Points : 156
    Points
    156
    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