0

我将开发一个 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 的菜鸟)。
速度大师请帮助我!

4

1 回答 1

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 
}
于 2012-07-01T13:50:49.983 回答