Proble Nvelocity

[Résolu]
Signaler
Messages postés
16
Date d'inscription
lundi 16 janvier 2006
Statut
Membre
Dernière intervention
19 avril 2010
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
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

Messages postés
296
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
18 août 2008

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 !!!
Messages postés
16
Date d'inscription
lundi 16 janvier 2006
Statut
Membre
Dernière intervention
19 avril 2010

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;
            }

        }
    }
}
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
18 août 2008

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 !!!
~~~~~~~~
Messages postés
16
Date d'inscription
lundi 16 janvier 2006
Statut
Membre
Dernière intervention
19 avril 2010

Bonjour Stagires
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
18 août 2008

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 !!!
Messages postés
16
Date d'inscription
lundi 16 janvier 2006
Statut
Membre
Dernière intervention
19 avril 2010

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
Messages postés
16
Date d'inscription
lundi 16 janvier 2006
Statut
Membre
Dernière intervention
19 avril 2010

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
Messages postés
16
Date d'inscription
lundi 16 janvier 2006
Statut
Membre
Dernière intervention
19 avril 2010

Merci becps
en fait j'ai trouvé
Merci merci A+

Bonjour Stagires
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
93
"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
*/