Proble Nvelocity

Résolu
tamcheiktt Messages postés 16 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 19 avril 2010 - 27 mai 2008 à 14:30
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 14 juin 2008 à 11:56
Bonjour, je travaille sur les Templaters StringTemplate, NVeloity et SharpTemplate en fin je devrai choisir un parmi les trois pour développer un projets, j'arrvie avec les trois à realiser une exempel


mon probléme est le suivant:


je dervrai mettre toutes les templates dans le même fichier


en suite charger un template via son id :


<?xml version="1.0" encoding="utf-8" ?>
<templates>
  <template id="1">
    <title>$title$</title>
    $users:{
      <name>$it.name$</name>
      $it.age$
    }$
  </template>


  <template id="2">

    <title>$title$</title>

    $users:{

      <name>$it.name$</name>

      $it.age$

    }$

  </template></templates>


j'arrive à charger tout le contenu du fichier pas chaque template, merci de repondre et de donner tous lines jugés utils


merci

9 réponses

Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008
29 mai 2008 à 11:07
Si ton fichier contient tous les templates tu vas devoir le charger au moins un peu pour l'utiliser avec un XMLReader ou une XMLDocument je crois.

Ensuite tu pourras par exemple parcourir tous les noeuds qui sont situés directement sous ton noeud "templates" et lui dire de selectionner ton noeud avec l'id correspondante.

Ca donnerait qque chose comme :

using System.Xml;

...

private void getTemplate(string templatesFileName,int reqId)
{
            // Create an instance of XmlDocument
            XmlDocument document = new XmlDocument();

            // load in it what the "templatesFileName" contains
            document.Load(templatesFileName);

            // for eache node of the document
            foreach (XmlNode first in document.ChildNodes)
            {
                // if it is an Element and his name is "templates"                if (first.NodeType XmlNodeType.Element && first.Name "templates")
                {
                    foreach (XmlNode second in first.ChildNodes)
                    {
                        // if it is an Element and his name is "template"                        if (second.NodeType XmlNodeType.Element && second.Name "template")
                        {
                            //we verify that there is an id
                            if( second.Attributes.getItemNamed("id")!=null )
                             {
                                  // if the Id is good
                                  if ( second.Attributes.getItemNamed("id") == reqId )
                                  {
                                           // TODO the return of template informations
                                           break;
                                   }
                           }
                      }
                 }
}

( Bon je laisse le code, comme on est dans la rubrique C# je t'ai donné un programme pour recuperer tes infos de template XD Eventuellement tu peux toujours te recrér un XML temporaire contenant juste ton template )

Ton Velocity te sert à generer ton fichier XML ? Ou tu dois recuperer les infos du XML pour les utiliser dans ton script Velocity ?

On peut écrire francais sur un clavier allemand , c'est juste plus long !!!
3
tamcheiktt Messages postés 16 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 19 avril 2010
5 juin 2008 à 10:26
Bonjour, merci pour la réponse
c'est dans Nvelocity que je genère mes donnes :
par exemple le ficheir template.vm:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
  <head>
    <title></title>
  </head>
 
          #foreach($User in $users)
      ----

            $User.name,
            $User.age,
     
            #end
     
     

    
</html>
et dans une classe user:
using System;
using System.Collections.Generic;
using System.Text;

namespace TestNVlocity
{
  public class User
    {
        private String name;
        private int age;

        public String Name
        {
            get
            {
                return name;
            }
        }

        public int Age
        {
            get
            {
                return age;
            }
        }

        public User(String name, int age)
        {
            this.name = name;
            this.age = age;
        }
    }
}
dans une classe pour la liste des utilisateur
using System;
using System.Collections.Generic;
using System.Text;
using NVelocity;

namespace TestNVlocity
{
    public class UserListPage
    {
        public static User[] users = new User[] { new User("Boris", 39),
            new User("Natasha", 31),
            new User("Jorge", 25),
            new User("Vladimir", 28)};
    }
}
dans mon main :
using System;
using System.IO;
using System.Collections;
using Velocity = NVelocity.App.Velocity;
using VelocityContext = NVelocity.VelocityContext;
using ParseErrorException = NVelocity.Exception.ParseErrorException;
using MethodInvocationException = NVelocity.Exception.MethodInvocationException;

namespace TestNVlocity
{
    public class Example2
    { 
        public static void Main(String[] args)
        {
            try
            {
                Velocity.Init();
                NVelocity.Template template = Velocity.GetTemplate(@"template.vm");
                VelocityContext context1 = new VelocityContext();
                context1.Put("users", UserListPage.users);
                StringWriter writer1 = new StringWriter();
                template.Merge(context1, writer1);
                Console.Out.WriteLine(" Tester Lecontenu de notre : " + writer1.GetStringBuilder().ToString());
                Console.ReadLine();
            }
            catch (Exception e)
            {
                Console.Out.WriteLine("Problem d'initialisation de Velocity : " + e);
                Console.ReadLine();
                return;
            }

        }
    }
}
3
Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008
5 juin 2008 à 10:57
Donc si j'ai bien suivi tu fais C# => Velocity => HTML , c'est ca ?
Et sinon tu vas toujours appliquer tous les templates ? Ou alors tu vas passer en parametre quelque part l'id de template à utiliser ?

~~~~~~~~~~
Les trois lois de Codes-Sources :
1) Tu lis et respecte le reglement
2) Tu pense a valider si une reponse apportée a ton probleme t'a aidé
3) Si tu ne respecte pas les 2 premières ....TU SORS !!!
~~~~~~~~
3
tamcheiktt Messages postés 16 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 19 avril 2010
27 mai 2008 à 14:30
Bonjour Stagires
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008
28 mai 2008 à 10:27
Rien compris a la question, ni à la reponse, si tu pouvais eclairer un peu ma lanterne:
Quand à ce que tu dois utiliser, je n'ai pratiqué que rapidement le Velocity, donc je peux toujours essayer de t'aider (si je comprends la question donc ^^ )

(Et sinon vu que Velocity est un langage a part entière et que pas vraiment de rapport avec C# il aurait été mieux vu de poster dans le bar, en plus tu aurais eu plus d'utilisateurs qui l'auraient vu et donc plus de conseils potentiels  ;) )

On peut écrire francais sur un clavier allemand , c'est juste plus long !!!
0
tamcheiktt Messages postés 16 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 19 avril 2010
29 mai 2008 à 10:02
Bonjour en fait mon problème est le suivant:
Je voudrrai créer un fciheir XML pour toutes les templates que je vais utiliser
<templaes>
    <template id="1">
    <template>
    <template id="2">

    <template>
</templates>
La quetion, comment faire pour charger un seul template à partir de mon Fichier par exemple <template id="1"> sans charger tout le fciheir
merci
0
tamcheiktt Messages postés 16 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 19 avril 2010
5 juin 2008 à 10:27
donc le soucis ce que dans le fciheir .vm j'ai toutes les tmplates à générer donc comment charger l'une apèrs l'autre?
merci pour la réponse
0
tamcheiktt Messages postés 16 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 19 avril 2010
11 juin 2008 à 11:06
Merci becps
en fait j'ai trouvé
Merci merci A+

Bonjour Stagires
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
14 juin 2008 à 11:56
"en fait j'ai trouvé"
Ca pourrait être cool de donner la solution donc, pour ceux qui vont tomber ici durant leurs recherches.

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous