XSLT appliqué au VRML

N'en posez pas trop, spas ? C'est chez web3d-fr, la technique. Ici, c'est juste dépannage.

XSLT appliqué au VRML

Messagepar Arsène » Mar 10 Mars 2009 5:13

Arsène a écrit:Le source du fichier XSL pour produire du VRML a changé ; Blaxxun n'aime pas des nombres tels que 0.00000000000000011102230246251565 qui sont pourtant acceptés par VrmlPad et conformes à la spécification du VRML.

Il serait plutôt comme ceci :
Code: Tout sélectionner
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="UTF-8" media-type="model/vrml"/>

<xsl:template match="/">#VRML V2.0 utf8

WorldInfo {
    title "<xsl:value-of select='concat("Outside - Top 10 ", /TopSampler/@period)'/>"
    info [
        "<xsl:value-of select="/TopSampler/@time"/>"
        "<xsl:value-of select="count(/TopSampler/scenes/scene)"/> scenes"
    ]
}
<xsl:if test='count(/TopSampler/scenes/scene[@href]) != 0'>
EXTERNPROTO Bar [
    field SFString description
    field MFString url
    field SFString alt
    field SFVec3f scale
    exposedField SFVec3f translation
] "TopSampler.wrl#Bar"

Group {
    children [
        <xsl:for-each select="/TopSampler/scenes/scene[@href][position() &lt;= 10]">Bar {
            description "<xsl:value-of select="."/>"
            url "<xsl:value-of select="@href"/>"
            alt "<xsl:value-of select="@alt"/>"
            scale 1 <xsl:value-of select="round(number(substring-before(@percent, '%')) * 100) div 10000"/> 1
            translation <xsl:value-of select="round(((position() * 1) - 6) * 1000) div 10000"/> 0 0
        }
</xsl:for-each>
    ]
}
</xsl:if>
</xsl:template>

</xsl:stylesheet>


La ligne
Code: Tout sélectionner
<xsl:template match="/">#VRML V2.0 utf8
est indispensable pour avoir l'entête VRML au début.

Peut-être que ça va vous inspirer d'autres applications nécessitant de convertir du XML en VRML.
C'est ce qui est utilisé pour convertir du X3D (encodé XML) en X3DV (encodé VRML) et en VRML (encodé VRML).
Les données XML de départ pourraient, par exemple, provenir d'un flux RSS, à afficher en VRML.

Ah, ben, pour afficher des nombres dans du VRML en utilisant XSL, il y a encore mieux que ce que j'ai mis dans le source ci-dessus.

Vous avez tout intérêt à utiliser la fonction XSL format-number (cette doc de DecimalFormat semble toujours d'actualité).

J'utilise ".####" comme format pour limiter à 4 chiffres après la virgule.

Les lignes pour scale et translation deviennent donc :
Code: Tout sélectionner
            scale 1 <xsl:value-of select='format-number(number(substring-before(@percent, "%")) div 100, ".####")'/> 1
            translation <xsl:value-of select='format-number(((position() * .1) - .6),  ".####")'/> 0 0


J'utilise des apostrophes ' pour les attributs, au lieu des guillemets ", parce que ni XML ni HTML, ne font la différence, du moment que c'est le même symbole au début et à la fin.
Avatar de l’utilisateur
Arsène
 
Messages: 4201
Inscrit le: Mer 08 Sep 2004 22:35
Localisation: Paris

Retour vers Questions techniques

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron