2012-05-02 13 views
8

Sto cercando di creare un semplice XML Template che consiste finora solo di:StringTemplate carattere non valido '<' quando legge Template XML

<?xml version="1.0"?> 

ho letto il file in questo modo:

STGroup group = new STGroupDir("templates"); 
    ST st = group.getInstanceOf("report"); 
    st.add("analysis", ana); 
    String result = st.render(); 
    System.out.println(result); 

e il risultato è diversi messaggi di errore:

report.st 1:1: invalid character '<' 
report.st 1:1: invalid character '?' 
report.st 1:19: invalid character '?' 
report.st 1:20: invalid character '>' 
report.st 1:2: no viable alternative at input 'xml' 

ho visto altre persone che leggono tempaltes HTML che utilizzano i tag. Quindi cosa sto sbagliando?

+0

E 'vuoto: appena aveva dichiarato tipo di documento. –

+0

Prova a usare inspector [http://www.antlr.org/wiki/display/ST4/StringTemplate+Inspector+GUI](http://www.antlr.org/wiki/display/ST4/StringTemplate+Inspector+GUI) –

+0

Non è previsto il file xml come input. Vedi sintassi su [http://www.antlr.org/wiki/display/ST4/StringTemplate+cheat+sheet](http://www.antlr.org/wiki/display/ST4/StringTemplate+cheat+sheet). –

risposta

4

Ok, sembra che non abbia notato che è necessario specificare i modelli in un diverso snytax. Il solo fatto che questo non era evidente dagli esempi che ho usato:

Il mio modello di lavoro è diversa ora:

report (analysis) ::= << 
<?xml version="1.0"?> 
>> 

Inoltre ho anche cambiato il delimitatori:

STGroup group = new STGroupDir("templates",'$','$'); 
+0

Questo è quello che ti ho detto quando ha detto che non si aspettava affatto xml. –

+0

Se vuoi qualcosa con un modello che è in realtà un modello, guarda su freemarker. –

+2

Sì. Sebbene Terrence Parr continui a dire che StringTemplate è una buona separazione modello/vista, non posso immaginare un designer che possa essere bohettato per scrivere modelli per questo. – er4z0r

2

Ho scoperto che si può sfuggire l'angolare così:

report(analysis) ::= << 
\<?xml version="1.0"?> 
>> 

Note le \ ri ght before the <?xml - Inoltre, è abbastanza intelligente da non richiedere un'altra escape alla parentesi di chiusura ?>.

E credo che ciò che Terrence Parr sta suggerendo sulla separazione modello/vista è che la vista non ha mai realmente un'opportunità di manipolare la struttura dati (o il modello) sottostante passata al modello. Ciò si ottiene "applicando" un modello ai dati o alla raccolta, piuttosto che eseguire il looping del modello sui dati. Forse è sottile, e forse praticamente (nel caso dei designer) un po 'troppo puro.

+0

Questo approccio ha funzionato come un fascino per me (sto usando StringTemplate 4.0.8). Sto votando perché a volte può essere più semplice aggiungere il backslash al modello piuttosto che sostituire per trovare un carattere inutilizzato. – cleberz

Problemi correlati