【问题标题】:How to use inner loops in Apache Velocity to parse XML如何在 Apache Velocity 中使用内部循环来解析 XML
【发布时间】:2012-07-01 13:42:35
【问题描述】:

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

【问题讨论】:

    标签: java xml templates velocity


    【解决方案1】:

    看看你是如何有一个&lt;constructors&gt;标签下面有&lt;constructor&gt;子标签的?

    您的&lt;para&gt; 孩子需要&lt;paras&gt; 父母。没有它,你会很难过。

    一旦你做到了,只需重复你已经完成的技巧。

    我想知道当 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 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 2012-09-30
      • 2014-06-18
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      相关资源
      最近更新 更多