2012-05-02 18 views
8

Estoy tratando de crear un sencillo XML plantilla que hasta ahora sólo se compone de:StringTemplate carácter no válido '<' al leer XML plantilla

<?xml version="1.0"?> 

leí el archivo de esta manera:

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

y el resultado es varios mensajes de error:

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' 

he visto otras personas que están leyendo Tempaltes HTML que también utilizan las etiquetas. Entonces, ¿qué estoy haciendo mal?

+0

Está vacío: sólo había declarado tipo de documento. –

+0

Intenta usar el inspector [http://www.antlr.org/wiki/display/ST4/StringTemplate+Inspector+GUI](http://www.antlr.org/wiki/display/ST4/StringTemplate+Inspector+GUI) –

+0

No está esperando el archivo xml como entrada. Consulte la sintaxis en [http://www.antlr.org/wiki/display/ST4/StringTemplate+cheat+sheet](http://www.antlr.org/wiki/display/ST4/StringTemplate+cheat+sheet). –

Respuesta

4

Bien, parece que pasé por alto que necesita especificar plantillas en un snytax diferente. Acabase esto no era obvio a partir de los ejemplos que he utilizado:

Mi plantilla de trabajo se ve diferente ahora:

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

Además también he cambiado el delimitadores:

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

Eso es lo que te dije cuando dijo que no esperaba nada de XML. –

+0

Si desea algo con una plantilla que en realidad sea una plantilla, consulte freemarker. –

+2

Sí. Aunque Terrence Parr sigue diciendo que StringTemplate es una buena separación modelo/vista, no puedo imaginarme a un diseñador que pueda ser bohemio para escribir plantillas para esto. – er4z0r

2

he encontrado que se puede escapar a la escuadra de soporte, así:

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

Nota los \ ri antes del <?xml - adicionalmente es lo suficientemente inteligente como para no requerir otro escape en el soporte de cierre ?>.

Y creo que lo que Terrence Parr está sugiriendo sobre la separación de modelo/vista es que la vista nunca tiene realmente la oportunidad de manipular la estructura de datos subyacente (o modelo) pasada a la plantilla. Esto se logra al "aplicar" una plantilla a los datos o colección, en lugar de hacer un bucle en la plantilla sobre los datos. Tal vez eso sea sutil, y tal vez prácticamente (en el caso de los diseñadores) un poco demasiado puro.

+0

Este enfoque funcionó como un encanto para mí (estoy usando StringTemplate 4.0.8). Estoy votando porque a veces puede ser más fácil agregar la barra invertida a la plantilla que reemplazar por encontrar un carácter no utilizado. – cleberz

Cuestiones relacionadas