Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1591 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Longue liste avec attributs identiques

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Longue liste avec attributs identiques

n°1445822
esox_ch
Posté le 21-09-2006 à 15:33:31  profilanswer
 

Bonjour,
Dans le cadre de mon projet de CMS je me trouve confronté à un problème potentiel de performances.
Quand je sors un listing de la base de donnée, celui-ci est transformé en flux XML puis transformé en xHtml à l'aide d'une feuille xsl.
Le problème est le suivant, des fois je dois sortir un long listing (par rapport les accès au site) qui est, actuellement, sous la forme :

Code :
  1. <element>
  2. <id>
  3.   <readonly>1</readonly>
  4.   <value>1</value>
  5. </id>
  6. <time>
  7.   <readonly>1</readonly>
  8.   <value>17:01</value>
  9. </time>
  10. <important>
  11.   <readonly>0</readonly>
  12.   <value>1</value>
  13. </important>
  14. </element>


Et ceci se repète X fois, 1 fois pour chaque ligne retournée par la base de donnée.
Le problème est que toutes les lignes auront certains attributs identiques (dans ce cas, tous les id seront readonly, idem pour les time, et tous les "important" seront non-readonly). Ducoup dans la structure actuelle je me trimbale avec beaucoup de données pour rien, ce qui me coute du temps et des performances.
 
J'ai pensé à faire une sorte de "cartouche" donnant les informations particulières à chaque item, mais ça me semble assez compliqué à parser après. Sinon j'avais pensé à rassembler toutes les données dans une meme structure , genre :

Code :
  1. <id>
  2. <readonly>1</readonly>
  3. <value>1</value>
  4. <value>2</value>
  5. ..
  6. </id>


Mais ça me semble super sale, et je me vois déjà les problèmes de tri au cas ou PHP ferait une faute en inscrivant les données :/.
 
Comment voyez vous la situation ?  
 
Merci beaucoup  :bounce:

mood
Publicité
Posté le 21-09-2006 à 15:33:31  profilanswer
 

n°1445843
MagicBuzz
Posté le 21-09-2006 à 15:52:02  profilanswer
 

j'utiliserais plutôt le format des dataset de .NET (pour les web service par exemple)
 
à savoir :
 
une section de déclaration, qui marche comme une xsd (liste des champs, avec informations de taille, type, etc. où tu peux mettre ton "readonly" ) puis une section de données, où tu listes toutes les lignes avec uniquement les valeurs des champs.
 
exemple :
 


<result>
  <definition>
    <field name="id" readonly="1"/>
    <field name="time" readonly="1"/>
    <field name="important" readonly="0"/>
  </definition>
  <data>
    <element>
      <id>1</id>
      <time>17:01</time>
      <important>1</important>
    </element>
    [...]
  </data>
</result>


Message édité par MagicBuzz le 21-09-2006 à 15:52:41
n°1445849
esox_ch
Posté le 21-09-2006 à 15:54:54  profilanswer
 

Oui c'est ce que je faisais quand je parlais de "cartouche". Je vais ecouter ce que les autres ont à dire mais je pense que je vais faire comme ça


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1445874
MagicBuzz
Posté le 21-09-2006 à 16:31:53  profilanswer
 

Ern gros, mon truc, après prise de tête (y'a pas un truc qui permet de parcourir tous les éléments d'une node afin de retrouver leur nom ?)
 
Donc :
 
xsl :

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
  3. <!-- Le msxsl c'est pour récupérer la node dans la variable, car chaque parseur XSL à son truc proprio, c'est mega pratique... ici, l'implémentation de Microsoft -->
  4.   <xsl:template match="/" xmlns="http://www.w3.org/1999/xhtml">
  5.     <html>
  6.       <head>
  7.         <title>Test</title>
  8.       </head>
  9.       <body>
  10.         <xsl:apply-templates select="/result"/>
  11.       </body>
  12.     </html>
  13.   </xsl:template>
  14.   <xsl:template match="result" xmlns="http://www.w3.org/1999/xhtml">
  15.     <table border="1">
  16.       <tr>
  17.         <th>-</th>
  18.         <xsl:for-each select="definition/field">
  19.           <th>
  20.             <xsl:value-of select="@name"/>
  21.           </th>
  22.         </xsl:for-each>
  23.       </tr>
  24.       <xsl:for-each select="data/element">
  25.         <xsl:variable name="currentElement"><xsl:copy-of select="."/></xsl:variable>
  26.         <tr>
  27.           <th><xsl:value-of select="position()"/></th>
  28.           <xsl:for-each select="../../definition/field">
  29.             <xsl:variable name="name"><xsl:value-of select="@name"/></xsl:variable>
  30.             <td>
  31.               <xsl:choose>
  32.                 <xsl:when test="@readonly = 1">
  33.                   <xsl:value-of select="msxsl:node-set($currentElement)/element/field[@name = $name]"/>
  34.                 </xsl:when>
  35.                 <xsl:otherwise>
  36.                   <input type="value">
  37.                     <xsl:attribute name="value"><xsl:value-of select="msxsl:node-set($currentElement)/element/field[@name = $name]"/></xsl:attribute>
  38.                   </input>
  39.                 </xsl:otherwise>
  40.               </xsl:choose>
  41.             </td>
  42.           </xsl:for-each>
  43.         </tr>
  44.       </xsl:for-each>
  45.     </table>
  46.   </xsl:template>
  47. </xsl:stylesheet>


 
xml

Code :
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <?xml-stylesheet type="text/xsl" href="toto.xsl"?>
  3. <result>
  4.   <definition>
  5.     <field name="id" readonly="1"/>
  6.     <field name="time" readonly="1"/>
  7.     <field name="important" readonly="0"/>
  8.   </definition>
  9.   <data>
  10.     <element>
  11.       <field name="id">1</field>
  12.       <field name="time">17:01</field>
  13.       <field name="important">1</field>
  14.     </element>
  15.     <element>
  16.       <field name="id">3</field>
  17.       <field name="time">18:29</field>
  18.       <field name="important">Truc muche</field>
  19.     </element>
  20.   </data>
  21. </result>


 
chez moi ça marche sous ie
 
y'a juste le coup du "msxsl:node-set()" qui est chiant car il faut trouver l'équivalent pour ton parseur, c'est du XSL2, et chaque parseur a implémenté node-set() avec son propre namespace, c'est hyper pratique.

n°1445880
MagicBuzz
Posté le 21-09-2006 à 16:33:59  profilanswer
 

ps: tu noteras par contre que si c'est juste pour stocker "readonly" tu gagne rien. j'espère pour toi que t'as plus d'infos redondantes ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Longue liste avec attributs identiques

 

Sujets relatifs
Gestion d'une liste de membres (BO)Problème de lien avec une liste déroulante
[HTML/JS]Mise a jour d'une image apres un choix dans une liste[C#/Excel] Comment ajouter une liste déroulante dans une cellule ?
Convertir date longue"Aug 1 2006 12:00AM"" en date "courte"Lire les données d'une liste de validation
[JavaScript] Liste dynamique dans un formulaire SELECTliste deroulante dans un etat access
gif figé lors de traitement d'une fonction javascript longue 
Plus de sujets relatifs à : Longue liste avec attributs identiques


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR