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

XSL/XSLT/XPATH XML Discussion :

encoder des valeurs int dans xml en binaire et sortir en txt


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut encoder des valeurs int dans xml en binaire et sortir en txt
    Voila j'ai des points x/y ex (512,2049), (1023,100) ...

    la liste de couples sont en int dans un fichier xml
    au final je dois sortir le fichier (.txt) avec une partie texte et une partie encodée telle que décrit ci dessous

    x poids fort poids faible | y poids fort poids faible
    512 02 00 | 2049 08 01
    1023 03 255 | 100 00 100

    fichier final
    00 02 01 08 255 03 100 00

    est ce que les opérateur numériques de xslt me permettent de manipuler ces valeurs de points pour les encoder et les sortir en txt?

    Merci

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    XPath 1.0 dispose des fonctions et opérateurs de base pour faire cela : floor(), mod, div, ...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Oui mais l'inversion poids fort poids faible?
    J'ai fait un template qui me transforme la valeur mais j'ai deux problèmes :
    L'inversion poids fort poids faible et
    la suppression des 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:template name="toHex">
    		<xsl:param name="decimalNumber" />
    		<xsl:if test="$decimalNumber >= 16">
    			<xsl:call-template name="toHex">
    				<xsl:with-param name="decimalNumber" select="floor($decimalNumber div 16)" />
    			</xsl:call-template>
    		</xsl:if>
    		<xsl:value-of select="substring($hexDigits,($decimalNumber mod 16) + 1, 1)" />
    	</xsl:template>
    en effet à partir des 2 couples (512,2049), (1023,100)
    j'obtiens 2008013FF64
    et non pas 00020108FF036400

    merci pour vos aides

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    ta fonction est correcte, il faut juste ecrire une autre fonction appelant celle-ci et qui se charge de formater son résultat, en ajoutant des zéros et en intervertissant les binômes. Ca ne pose pas de problème particulier en utilisant les fonction XPath string-length() et substring().

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Lenteur extrème
    j'ai fini le développement et j'obtiens le résultat que je veux mais si j'utilise un xml contenant beaucoup de points ( 100 000 points) alors c'est très très lent.

    Je pense qu'il faut optimiser le code mais je ne vois pas où et comment.

    Merci de votre aide

    Fichier XML (light 10 points)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="utf-8"?>
    <?xml-stylesheet href="TransformPoints.xsl" type="text/xsl"?>
    <XMLExport>
       <Points>
            <X>512;1023;1841;1696;1888;1939;1734;1532;1473;1729</X>
            <Y>2049;100;956;944;1053;1120;1012;963;847;1008</Y>
       </Points>
    </XMLExport>
    Fichier XSL
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/TR/REC-html40"
    xmlns:str="http://exslt.org/strings"
    extension-element-prefixes="str"
    xmlns:fn="http://www.w3.org/2005/02/xpath-functions">
    	<xsl:import href="str.tokenize.msxsl.xsl" />
    	<xsl:output indent="yes" method="text"/>
     
    	<xsl:variable name="hexDigits" select="'0123456789ABCDEF'" />
     
    	<xsl:template match="/">
    		<xsl:variable name="Tab1" select="str:tokenize(/XMLExport/NodeCorrelationGR/Output/Impulsions_correlees/Hauteur_RES,';')"/>
    		<xsl:variable name="Tab2" select="str:tokenize(/XMLExport/NodeCorrelationGR/Output/Impulsions_correlees/Largeur_RES,';')"/>
    		<xsl:for-each select="$Tab1">
    			<xsl:variable name="i" select="position()"/>
    			<xsl:variable name="String1" select="$Tab1[$i]"/>
    			<xsl:call-template name="Invert">
    				<xsl:with-param name="String" select="$String1"/>
           			</xsl:call-template>
           			<xsl:variable name="String2" select="$Tab2[$i]"/>
    			<xsl:call-template name="Invert">
    				<xsl:with-param name="String" select="$String2"/>
           			</xsl:call-template>
    		</xsl:for-each>		
    	</xsl:template >
     
    	<xsl:template name="Invert">
    		<xsl:param name="String" />
    		<xsl:variable name="HexValue">
    			<xsl:call-template name="toHex">
    				<xsl:with-param name="decimalNumber" select="number($String)"/>
           			</xsl:call-template>
    		</xsl:variable>
    		<xsl:variable name="AddValue">
    			<xsl:call-template name="ZeroAdd">
    				<xsl:with-param name="repeat" select="4-string-length($HexValue)"/>
    			</xsl:call-template>
    		</xsl:variable>
    		<xsl:variable name="Hex" select="concat($AddValue,$HexValue)"/>
    		<xsl:value-of select="concat(substring($Hex,3,2),substring($Hex,0,3))"/>
    	</xsl:template>
     
    	<xsl:template name="toHex">
    		<xsl:param name="decimalNumber" />
    		<xsl:if test="$decimalNumber >= 16">
    			<xsl:call-template name="toHex">
    				<xsl:with-param name="decimalNumber" select="floor($decimalNumber div 16)" />
    			</xsl:call-template>
    		</xsl:if>
    		<xsl:variable name="Hex" select="substring($hexDigits,($decimalNumber mod 16) + 1, 1)" />
    		<xsl:value-of select="$Hex"/>
    	</xsl:template>
     
    	<xsl:template name="ZeroAdd">
    		<xsl:param name="repeat">0</xsl:param>
    		<xsl:if test="number($repeat) >= 1">
    			<xsl:value-of select="0"/>
    			<xsl:call-template name="ZeroAdd">
    				<xsl:with-param name="repeat" select="$repeat - 1"/>
    			</xsl:call-template>
    		</xsl:if>
    	</xsl:template>
     
     
    </xsl:stylesheet>

Discussions similaires

  1. [WD14] Encoder des valeurs dans une table à partir de champ de saisie
    Par LuckyLuke56 dans le forum WinDev
    Réponses: 3
    Dernier message: 28/05/2010, 15h51
  2. Des int dans un buffer binaire
    Par Colbix dans le forum C++
    Réponses: 16
    Dernier message: 30/03/2009, 15h42
  3. [VBA-W]prendre des valeurs "texte" dans Excel
    Par teromah dans le forum VBA Word
    Réponses: 12
    Dernier message: 14/06/2007, 17h20
  4. [JDOM] Comment recuperer des valeurs textes dans XML ?
    Par Battosaiii dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 03/11/2006, 14h38
  5. Réponses: 11
    Dernier message: 22/02/2006, 18h25

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