Salut tout le monde, Smiley smile
Je travail sur un petit programme de gestion des documment 3D en PLMXML, le but est de choisir la pièce qu'on souhaite affiché, et par la suite joué sur sa couleur et sa transparence, pour l'instant je sait selectionné n'importe qu'elle pièce, le fichier PLMXML source représente un moteur a deux cylindres(juste pour l'info) et donc, il y a des pièces composées, le but de cette 2ème partie est d'affiché les parties quand je rentre en paramètre une pièce composée. voici la solution a la quel j'ai pensé, mais il me manque encore quelque astuces:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method='xml' encoding='ISO-8859-1' indent='yes'/>


<xsl:template match="/">
<PLMXML>
<ProductDef id="id1">
<InstanceGraph id="id2" rootRefs="inst1798736">
<xsl:apply-templates/>
</InstanceGraph>
</ProductDef>
</PLMXML>
</xsl:template>

<xsl:param name="inst"/>
<xsl:param name="id"/>

<xsl:template match="//Instance[@id='inst1798736']">
<xsl:copy-of select="."/>
</xsl:template>
 
<xsl:template match="//Instance[@id=$inst]">
<xsl:copy-of select="."/>
</xsl:template>

<!--
<xsl:template match="//Instance[@id=XX]">
<xsl:copy-of select="."/>
<xsl/template>
-->

<xsl:template match="//Part[@id='id14']">
<Part id="id14" name="2_Cylinder_Engine" type="assembly">
<xsl:attribute name="instanceRefs">
<xsl:value-of select="$inst"/>
</xsl:attribute>
</Part> 
</xsl:template> 
    
<xsl:template match="//Part[@id=$id]">
<xsl:copy-of select="."/>
</xsl:template>

<xsl:template match="text()"></xsl:template>
</xsl:stylesheet>

Dans la partie XX, je veux mettre le résultat de:

<xsl:template select="//Part[@id=$id]">
<xsl:value-of select="@instanceRefs"/>
</xsl:template>

Le problème c'est que dans <instanceRefs> on peut trouvez plusieurs valeurs (quand la pièce est composé de plulieurs parties), la dificulté est de faire la même chose pour chaque veleurs (les valeurs sont séparé par des espaces).
Exemple du fichier source plmxml:

...
<Part id="id64" name="Piston Sub:;0,Parts" instanceRefs="inst1912768 inst1865720" type="assembly">
<Occurrence id="id66">
<Transform id="id67">...</Transform></Occurrence></Part>

<Part id="id74" name="Piston:123-844;0,Parts" type="solid">
<Bound id="id80" values="..."></Bound>
...

Je compte sur vos idées Smiley cligne
Merci
Modifié par aadari (19 Oct 2007 - 15:55)
Modérateur
Salut,

Ce serait plus simple si les valeurs répertoriées dans ton attribut instanceRefs étaient structurées parce que là, ça t'oblige à faire des prouesses au niveau de tes expressions XPath. Smiley ohwell
Oui assez d'accord, mais j'ai pas le droit de modifié mon fichier source.
Smiley sweatdrop
Je pense a récupérer les valeurs de l'attribut instanceRefs (si ils existes), et d'appliquer le code tant qu'il y a des valeurs (mes coment Smiley decu ).
y a il un moyen de récuperer les valeurs une par une?? (y a des espaces entre les valeurs)
Modifié par aadari (25 Oct 2007 - 09:46)
Salut Smiley cligne
Je pense que j'ai avancé un peu, j'ai fait un tableau qui regroupe, les 'id' et les 'instanceRefs':

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method='html' encoding='ISO-8859-1' indent='yes'/>

<xsl:template match="/">
<html>
<body>

<h2>Liste ids noms</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>id</th>
<th>instanceRefs</th>
</tr>

<xsl:apply-templates/>

</table>
</body>
</html>
</xsl:template>

<xsl:template match="//Part">
<tr>
<td><xsl:value-of select="@id"/></td>
<td><xsl:value-of select="@instanceRefs"/></td>
</tr>
</xsl:template>

<xsl:template match="text()"></xsl:template>
</xsl:stylesheet>


Le but, maintenant est de recuperé, les instanceRefs une par une et d'appliqué mon code a chaque fois.
Avez vous des idées??? Please Smiley decu
Modérateur
Salut, Smiley smile

A priori, je pense qu'il faut intégrer une variable que tu fais varier en faisant une boucle et que tu récupères chaque "instanceRef" en les séparant avec du code php ou js (que tu mets dans un élément xsl:processing-instruction).

A tester...

Par le biais d'XPath uniquement, je ne crois pas que cette séparation soit possible.
Modifié par koala64 (29 Oct 2007 - 16:03)
Merci pour l'astuce, le problème c'est que je suis nul en PHP, et franchement je ne voix pas du tout coment il faut faire. Smiley confus Je suis bloqué de puis un certaiçn moment déjà Smiley fache
bonjour

et avec

<xsl:for-each select=@instanceRefs>
              [i]//instruction[/i]
</xsl:for-each>


qui revient un peu à un do/while : faire : instructions
tant que (il y a des attributs instancerefs)



(j'suis pas sur 100% de la syntaxe )
Modifié par kzone (30 Oct 2007 - 00:21)
Bonsoir,

j'ai essayé cette solution :



<xsl:template match="//Part[@id=$id]">
<xsl:for-each select="@instanceRefs">
<xsl:cop-of select="//Instance[@id=$instanceRefs]"/>
</xsl:for-each>
</xsl:template>


Mais ça ne marche pas, c'est un peu normal car ce que je veux copier n'est pas dans ma selection Smiley rolleyes , et donc je ne sais pas comment faire Smiley sweatdrop en plus je ne suis pas sur de ma syntaxe (cela dit il ny a pas message d'erreur) Smiley biggrin
aadari a écrit :
Bonsoir,

j'ai essayé cette solution :



<xsl:template match="//Part[@id=$id]">
<xsl:for-each select="@instanceRefs">
<xsl:copy-of select="//Instance[@id=$instanceRefs]"/>
</xsl:for-each>
</xsl:template>


Mais ça ne marche pas, c'est un peu normal car ce que je veux copier n'est pas dans ma selection Smiley rolleyes , et donc je ne sais pas comment faire Smiley sweatdrop en plus je ne suis pas sur de ma syntaxe (cela dit il ny a pas message d'erreur) Smiley biggrin