java - 如何使用 Apache Velocity 中的内部循环来解析 XML

标签 java xml templates velocity

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

最佳答案

看看你如何拥有<constructors>标记为 <constructor>下面有 child 吗?

您需要一个<paras>您的 parent <para> children 。没有它你会过得很艰难。

一旦你做到了,只需重复你已经表演过的技巧即可。

我想知道当 JAXB 是 JDK 的一部分时为什么需要这个。我还想知道为什么简单地编写类(class)会是一件如此困难的事情。这是一种情况,您认为“自动化”解决方案会更好,但是弄清楚如何做到这一点所需的时间大大超过了您只是坐下来开始打字所花费的时间?

<?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 
}

关于java - 如何使用 Apache Velocity 中的内部循环来解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11282458/

相关文章:

java - hibernate和mysql的Persistence.xml设置显示 "No Persistence provider for EntityManager"

c++ - 访问在 C++ 模板中声明的常量

c++ - 在可变参数模板类的构造函数中初始化元组成员

java - 在 BlackBerry 上播放声音的问题

java - Android - 在 Activity 之间传递一组类

java - 拆分 Java 流中的对象

python minidom : 'NoneType' object has no attribute 'data' from url

xml - 我的 xpath 查询没有找到任何结果

java 模拟 C# SqlConnection 和数据访问层(我的尝试)

jQuery 自定义小部件 : how can I include a html template?