Olá pessoal!
Estou desenvolvendo meu projeto final da faculdade, cujo o objetivo é através de um XML gerado de um diagrama de classe converter em interfaces adobe flex, eu estou tentando usar o velocity para poder fazer esse processo, mas não estou entendendo muito bem, gostaria de saber como faço para percorrer todo o XML com o velocity em uma estrutura de repetição.
O codigo abaixo é o meu XML:
inicio XML*********************
<?xml version="1.0" encoding="UTF-8"?>*****************Fim do XML ***********************
Abaixo esta a minha classe java:
package br.com.unigranrio.projetofinal.templates;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.Writer;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
public class ConversorXML {
public ConversorXML(String arquivoTemplete) {
Writer writer = null;
try {
Velocity.init();
SAXBuilder builder;
Document root = null;
try {
builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser");
root = builder.build("C:/modelo.xml");
} catch (Exception exception) {
exception.printStackTrace();
}
VelocityContext context = new VelocityContext();
context.put("root", root);
Template template = Velocity.getTemplate(arquivoTemplete);
writer = new BufferedWriter(new OutputStreamWriter(System.out));
template.merge(context, writer);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (writer != null) {
try {
writer.flush();
writer.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
public static void main(String[] args) {
ConversorXML converte = new ConversorXML("./src/velocity/XML/templateView.vm");
}
}
Abaixo esta o template do velocity que estou usando juntamente com o codigo do adobe flex:
#macro ( recursive $xml $indent )
#if( $xml.getChildren().size() > 0 )
$indent <$xml.getName()>
#foreach ($child in $xml.getChildren() )
#recursive( $child "$indent " )
#end
$indent </$xml.getName()>
#else
$indent <$xml.getName()>
$indent $xml.getTextTrim()
$indent </$xml.getName()>
#end
#end
<mx:Label x="43"
y="16"
text="$root.getRootElement().getChild("Models").getChild("Class").getChild("ModelChildren").getChild("Attribute").getAttributeValue("Name")"/>
<mx:TextInput x="94"
y="15.65"
id="campoProntuario"
width="118"
tabIndex="1"
enabled="true"
maxChars="100"
text="{Application.application.objClienteSelecionado.prontuario}"/>
O resultado quando executo minha aplicação:
<mx:Label x="43"
y="16"
text="Codigo"/>
<mx:TextInput x="94"
y="15.65"
id="campoProntuario"
width="118"
tabIndex="1"
enabled="true"
maxChars="100"
text="{Application.application.objClienteSelecionado.prontuario}"/>
Até ai tudo bem, o problema que ele so pega o primeiro elemento que o é codigo, como faço para o meu template percorrer todo meu xml e pegar todos os atributos que quero?
Obrigado!!!