XSL/XML Probleme avec fonction javascript

Résolu
agent_x_666 Messages postés 3 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 17 juillet 2009 - 14 juil. 2009 à 17:49
agent_x_666 Messages postés 3 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 17 juillet 2009 - 17 juil. 2009 à 14:22
Bonjour a tous,

j'ai un document xml et un feuille de style xsl qui produisent un rapport selon le type de rapport choisi.

Dans le cas precis sur lequel je butte depuis un certain temps, je doit calculer des somme selon le type d'element que je trouve dans le xml.
Au debut les somme se calculaient facilement, j'avait seulement deux somme a calculer, remblais, deblais.
Maintenant, je doit calculer les sommes de deux type element de plus, par contre le nombre d'element peut varier de 0 a xxx.

Donc j'ai cree un fonction qui additionne le unsuitable à la somme du groupe, ainsi qu'à la somme total du rapport
function fctUnsuitableSomme(NomElement, rUnsuitable)
{
    var Index = 0;
    
    Index = GetIndexFromName('Unsuitable', NomElement);


     unsuitableSomme[Index]    = unsuitableSomme[Index] + rUnsuitable;
     unsuitableSommeTot[Index] = unsuitableSommeTot[Index] + rUnsuitable;
      return String(Index);
}

La fonction GetIndexFromName recherche dans l'array d'element Unsuitable ou Roc pour retourner l'index de l'element a partir de son nom
sinon, elle l'ajoute
function GetIndexFromName(TypeElement, Name)
{
    var strName = Name;
    
    if (TypeElement == 'Roc')
    {
        for (var i=0; i<vNbreRocElement; i++)
        {
            if(vRocElementName[i] == strName)
            {
                return i;
            }
        }
        vNbreRocElement = vNbreRocElement + 1; 
        rocSomme[vNbreRocElement-1] = 0;
        rocSommeTot[vNbreRocElement-1] = 0;
        vRocElementName[vNbreRocElement - 1] = strName;
        return vNbreRocElement - 1;
    }
    else if (TypeElement == 'Unsuitable')
    {
        for (i=0; i<vNbreUnsuitableElement; i++)
        { 
            if(vUnsuitableElementName[i] == strName)
            {
                return i;
            }
        }
        vNbreUnsuitableElement = vNbreUnsuitableElement + 1;
        unsuitableSomme[vNbreUnsuitableElement - 1] = 0;
        unsuitableSommeTot[vNbreUnsuitableElement - 1] = 0;
        vUnsuitableElementName[vNbreUnsuitableElement - 1] = strName;
        return vNbreUnsuitableElement - 1;
    }
    return -1;
}

En fait ce qui se produit c'est que le nom que je passe a ma fonction GetIndexFromName n'est jamais reconnu dans l'array et les index se rende jusqu'a 158 au lieu de 3-4

Je ne sais pas si la facon de passer le nom a la fonction est mauvaise au bien la comparaison n'est pas adequate

Voici comme je call ma fonction
     <xsl:variable name="UnsuitableName"><xsl:value-of select="string([mailto:Material/@name)"/></xsl:variable Material/@name)"/></xsl:variable]>
     <xsl:variable name="RIENsommeUnsuitable" select="inr:fctUnsuitableSomme($UnsuitableName, number([mailto:../@adjustedVolume ../@adjustedVolume]) div $cubicFactor)"/>

 j'ai essayé bien des truc, rien ne fonctionne
Bien de la difficulté a deboguer le javascript aussi...

Aussi le length du nom quand je fais vUnsuitableElementName[0].length est 1, je crois que c'est en lien avec mon probleme.

Merci au expert, en attendant un reponse

Francis

4 réponses

agent_x_666 Messages postés 3 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 17 juillet 2009
17 juil. 2009 à 14:22
J'ai trouvé la solution

il faut prendre n'importe laquel des variable provenant du XML comme une nodelist

C-A-D

J'ai modifié mon call a ma fonction pour prendre le noeud courant avec le "."

<xsl:variable name="UnsuitableName"><xsl:value-of select="."/></xsl:variable>

et dans ma fonction

var strName = Name(0).text

pour prendre la premiere node

Merci a tous
3
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 juil. 2009 à 05:31
Bonjour,

je ne pense pas que le javascript se mette dans le xml et/ou le xsl
xml + xsl ==> html, sur lequel peut agir le javascript

quand au déboggage, il y a les outils nécessaires :

Navigateurs |Quelques Explications |----
Chrome
, contrôler page actuelle / Options pour développeurs
/ Console Javascript, ----
FireFox
, Outils / Console d'erreurs
et mieux : télécharger mon Site] [M'écrire] Bul
0
agent_x_666 Messages postés 3 Date d'inscription lundi 10 avril 2006 Statut Membre Dernière intervention 17 juillet 2009
15 juil. 2009 à 14:10
En fait ca fait deja parti du XSL et c'est fonctionnel
faut juste mettre une entete pour pouvoir l'utiliser

<!-- Portion en JAVA Script pour le calcul somme partiel des remblais et déblais -->
<msxsl:script implements-prefix="inr" language="JScript">
<![CDATA[
var vChaine = new Array(600);
var StationDepart = null;
var remblaiSomme = 0.0;
var remblaiSommeTot = 0.0;
var deblaiSomme = 0.0;
var deblaiSommeTot = 0.0;
var rocSomme = 0.0;
var rocSommeTot = 0.0;
...

Mais en regardant le code des fonction javascript est-ce que tu vois quelque chose de bizarre ou ca semble bon ?

Personne d'autre ne decele des erreur evidente causant le non fonctionnement total de mes trucs pourtant simple dans n'importe lequel des autre language ?

J'ai reussi a deboguer avec Xselerator. Mais je ne peut pas deboguer le javascript, parce qu'il est pas dans une page html, j'ai essayé avec firebug, la console marche pas. Je vais voir les autres navigateurs.

Il faut que je puisse donné au programme pour deboguer, le xsl et le xml pour qu'il effectue la transformation et c'est pendant ce temps que je doit deboguer mon affaire de javascript
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 juil. 2009 à 16:07
<msxsl:script implements-prefix="inr" language="JScript"> 

jamais pratiqué... je ne pourrais donc guère t'aider
va falloir que je regarde ce qu'on peut faire avec
néanmoins, jscript ==> exclusif IE alors ?
0
Rejoignez-nous