logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

Re: XML résumé (rectificatif): msg#00180

Subject: Re: XML résumé (rectificatif)
Je ne suis pas sur d'avoir bien compris ce qu'il vous fallait. Le code 
suivant vous irait ?

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

    <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>

    <xsl:template match="/ | *">
        <xsl:variable name="node" select="." />
        <xsl:variable name="name" select="name()" />
        <xsl:if test="not(preceding-sibling::*[name()=$name])">
            <xsl:copy>
                <xsl:for-each select="@*">
                    <xsl:copy />
                </xsl:for-each>
                <xsl:for-each 
select="following-sibling::*[name()=$name]/@*">
                    <xsl:variable name="attrName" select="name()" />
                    <xsl:if test="not($node/@*[name()=$attrName])">
                        <xsl:copy />
                    </xsl:if>
                </xsl:for-each>
                <xsl:apply-templates select="*"/>
            </xsl:copy>
        </xsl:if>
    </xsl:template>

</xsl:transform>

Je suis loin d'être un spécialiste. Il y a surement mieux pour obtenir 
le même résultat mais en attendant ça vous aidera peut-être.

Cordialement,
Jérôme

Bob wrote:

>(re)Bonjour Benoît,
>
>j'ai testé un peu rapidement tout à l'heure. En fait c'était toujours ma 
>version d'xslt qui était en action ;-)
>
>Benoît Barré a écrit :
>
>  
>
>>Est-ce suffisant ?
>> 
>>
>>    
>>
>non non non, pas du tout ;-) et ça me rassure. (j'avoue que j'ai eu 
>quelques minutes de gros doutes sur ma compréhension du fonctionnement 
>de xcopy)
>
>En fait, je souhaite que la transformation ne retourne qu'une fois 
>chaque élément et attribut. C'est ce que fait :
>http://www.bobiciel.com/maxopeninfo/tests/XmlResumeTest.xsl
>mais au prix fort en terme de temps et de ressources avec XsltProc
>
>il me semble qu'elle doit pouvoir être améliorée, en particulier mon 
>horrible
>concat(name(current()/../..),name(current()/..),name(current()),name(.)))
>qui doit amha être à l'origine de ce temps de traitement excessif
>
>Merci quand même pour cette réponse ;-)
>
>Bon week end
>
>Bob
>
>  
>
>><xsl:template match="/ | @* | *"> 
>> <xsl:copy> 
>>   <xsl:apply-templates select="@* | *"/> 
>> </xsl:copy> 
>></xsl:template> 
>>
>>
>>bB
>>
>>
>>
>>========================================
>>Date du message : févr. 25 2005, 02:33 PM
>>De : "Bob" 
>>A : xml-tech@xxxxxxxxx
>>Copie : 
>>Sujet : [xml-tech] XML résumé
>>
>>Bonjour,
>>
>>J'aurai besoin de votre expertise pour une petite transformation xslt
>>qui me pose quelques problèmes.
>>
>>Cette xslt permet d'obtenir un petit fichier xml résumant le contenu de
>>n'importe quel xml plus volumineux. On retrouve dans le résultat, un
>>exemplaire de chaque élément (et ses attributs avec exemple de valeur)
>>présent dans le fichier source. L'imbrication des éléments est également
>>conforme à celle d'origine.
>>
>>Avec XsltProc, ça fonctionne très bien sur des petits fichiers xml (qq
>>10 éléments) par contre, la durée de traitement augmente de façon
>>exponentielle avec la taille du fichier traité :-(
>>
>>Vous pouvez la télécharger ici :
>>http://www.bobiciel.com/maxopeninfo/tests/XmlResumeTest.xsl
>>
>>Y a-t-il une astuce ou une optimisation pour contourner ce problème sur
>>xsltproc.
>>
>>Avez vous une autre solution à me proposer pour réaliser ce "résumé" ?
>>
>>D'avance merci pour votre aide
>>
>>Cordialement
>>
>>Bob
>>



<Prev in Thread] Current Thread [Next in Thread>