XSL/XML Probleme avec fonction javascript [Résolu]

agent_x_666 3 Messages postés lundi 10 avril 2006Date d'inscription 17 juillet 2009 Dernière intervention - 14 juil. 2009 à 17:49 - Dernière réponse : agent_x_666 3 Messages postés lundi 10 avril 2006Date d'inscription 17 juillet 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
agent_x_666 3 Messages postés lundi 10 avril 2006Date d'inscription 17 juillet 2009 Dernière intervention - 17 juil. 2009 à 14:22
3
Merci
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

Merci agent_x_666 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de agent_x_666
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 15 juil. 2009 à 05:31
0
Merci
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
Commenter la réponse de Bul3
agent_x_666 3 Messages postés lundi 10 avril 2006Date d'inscription 17 juillet 2009 Dernière intervention - 15 juil. 2009 à 14:10
0
Merci
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
Commenter la réponse de agent_x_666
Bul3 4934 Messages postés samedi 1 juillet 2006Date d'inscription 2 février 2015 Dernière intervention - 15 juil. 2009 à 16:07
0
Merci
<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 ?
Commenter la réponse de Bul3

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.