我将开发一个eclipse插件来生成简单的Java源代码。 最初我需要将XML文件转换为Java类代码。 我从互联网上找到了Apache Velocity,现在我正在玩一些简单的东西。 这是我的输入XML文件:
<?xml version= "1.0" encoding= "UTF-8" ?>
<Content>
<Class name= "Customer" acc_modif="public">
<attributes>
<attribute attribute_type= "String" attribute_name= "studentName" attribute_acc_modifer="public"/>
<attribute attribute_type= "int" attribute_name= "age" attribute_acc_modifer="public"/>
</attributes>
<constructors>
<constructor con_acc_modifer="public" con_name="Student">
<para para_type="String" para_name="studentName"/>
<para para_type="int" para_name="age"/>
</constructor>
<constructor con_acc_modifer="public" con_name="Student">
<para para_type="String" para_name="studentName"/>
<para para_type="int" para_name="age"/>
</constructor>
</constructors>
</Class>
</Content>
这是我的模板文件:
## class .vm
##apachi-3
import java.util.*;
$class.acc_modif class $class.name {
#foreach ( $att in $class.attributes )
$att.attribute_acc_modifer $att.attribute_type $att.attribute_name;
#end
#foreach ( $con in $class.constructors )
$con.con_acc_modifer $con.con_name ( $con.para_type $con.para_name ) { ## Not working :(
}
#end
}
输出是这样的:
import java.util.*;
public class Customer {
public String studentName;
public int age;
public Student ( $con.para_type $con.para_name ) { }
public Student ( $con.para_type $con.para_name ) { }
}
学生建造者不工作。我想我需要在括号内使用另一个循环而不是“$ con.para_type $ con.para_name” 但我不知道如何在这里使用另一个循环(我是Apache Velocity的菜鸟) 速度大师请帮助我!
答案 0 :(得分:2)
了解如何在其下面加<constructors>
个<constructor>
个孩子的标记?
您的<paras>
孩子需要<para>
个父母。如果没有它,你将度过难关。
一旦你有了这个,只需重复你已经完成的技巧。
我想知道为什么在JAXB是JDK的一部分时你需要这个。我也想知道为什么简单地写这个课程会很困难。这是你认为“自动化”解决方案会更好的情况之一,但是如果你只是坐下来开始打字,那么弄清楚如何做到这一点的时间大大超过你所花费的时间。 ?
<?xml version= "1.0" encoding= "UTF-8" ?>
<Content>
<Class name= "Customer" acc_modif="public">
<attributes>
<attribute attribute_type= "String" attribute_name= "studentName" attribute_acc_modifer="public"/>
<attribute attribute_type= "int" attribute_name= "age" attribute_acc_modifer="public"/>
</attributes>
<constructors>
<constructor con_acc_modifer="public" con_name="Student">
<parameters>
<para para_type="String" para_name="studentName"/>
<para para_type="int" para_name="age"/>
</parameters>
</constructor>
<constructor con_acc_modifer="public" con_name="Student">
<parameters>
<para para_type="String" para_name="studentName"/>
<para para_type="int" para_name="age"/>
</parameters>
</constructor>
</constructors>
</Class>
</Content>
我会说你对大小写的使用是不一致的。选择一个并坚持下去。
你的模板:
## class .vm
##apachi-3
import java.util.*;
$class.acc_modif class $class.name {
#foreach ( $att in $class.attributes )
$att.attribute_acc_modifer $att.attribute_type $att.attribute_name;
#end
#foreach ( $con in $class.constructors )
$con.con_acc_modifer $con.con_name (
#foreach ($parameter in $parameters) # Not 100% sure of notation; I'll leave that for you
$con.para_type, $con.para_name
#end
) {
}
#end
}