`
xinklabi
  • 浏览: 1591310 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

使用xml与xslt动态生成java源代码

 
阅读更多

转自:http://www.wzsky.net/html/Program/jsp/19452.html

 

xsl本身就是一个构型良好的xml,它能够把一个xml文档转换成另外一个xml文档,或者转换成文本文件、html文件等等。这里就是利用xsl来动态的生成我们想要的java文件(从某种角度看,java代码其实也就是一个文本文件),希望能够通过这篇文章,看到xml以及相关的技术所具有的强大能力!

这里首先给一个xml例子,我们将通过一个xsl从该xml文件中抽取有用的信息来生成java代码(实际上是一个javabean):
[code]
<?xml version="1.0" encoding="ISO-8859-1" ?> 
<bean>
    <name>Product</name> 
    <comments>This bean represents a product that the company
offers to its customers</comments> 
    <property>
        <name>code</name> 
        <type>int</type> 
        <comments>the product inventory code</comments> 
    </property>
    <property>
        <name>name</name> 
        <type>String</type> 
        <comments>the product name</comments> 
    </property>
    <property>
        <name>testedOnAnimals</name> 
        <type>boolean</type> 
        <comments>the flag that indicates if the product was
tested on animals</comments> 
    </property>
    <property>
        <name>availableSince</name> 
        <type>java.util.Date</type> 
        <comments>the date when the company started offering this
product to its customers</comments> 
    </property>
</bean> 
[/code]

下面我就直接给出转换的xsl,如果大家对xsl不是很了解的话,可以先看一些资料,了解之后就会明白了。我在里面稍微做了些注释:
[code]
<?xml version="1.0"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"   
    xmlns:java="http://xml.apache.org/xslt/java"
    exclude-result-prefixes="java">

<!--这里就是指定通过这个xsl所转换的结果的类型,是text格式-->
<xsl:output method = "text"/>

<!--xslt使用模版来处理xml中的节点-->
<xsl:template match="bean">

/**
* <xsl:value-of select="comments"/>//这里是获取xml文档中的节点值
* This class has been generated by the XSLT processor from the
metadata 
*/
public class <xsl:value-of select="name"/> {

    /**
     * Creates a new instance of the <xsl:value-of
select="name"/> bean
     */
    public <xsl:value-of select="name"/>() {}
         
    <xsl:apply-templates select="property"/>
}
</xsl:template>

<xsl:template match="property">
    private <xsl:value-of select="type"/>
    <xsl:text> </xsl:text>//输出文本,这里是输出一个空格
    <xsl:value-of select="name"/>;
    <xsl:variable name="name" select="name"/>//定义xsl中要使用的变量
    <xsl:variable name="cname" select="java:Capitalizer.capitalize($name)"/>//这里使用了xslt extensions,它可以允许在xslt中直接引用java中方法,非常方便。
    /**
     * Sets <xsl:value-of select="comments"/>
     * @param <xsl:value-of select="name"/> is <xsl:value-of
select="comments"/>
     */
    public void set<xsl:value-of select="$cname"/>(<xsl:value-
of select="type"/> <xsl:text> </xsl:text><xsl:value-
of select="name"/>) {
      this.<xsl:value-of select="name"/> = <xsl:value-of
select="name"/>;          
    }

    /**
     * Returns <xsl:value-of select="comments"/>
     * @return <xsl:value-of select="comments"/>
     */
    public <xsl:value-of select="type"/><xsl:text></xsl:text>
    <xsl:apply-templates select="type"/><xsl:value-of
    select="$cname"/>() {
      return <xsl:value-of select="name"/>;
    }
</xsl:template>

<xsl:template match="type">
    <xsl:variable name="type" select="."/>
    <xsl:choose>
    <xsl:when test="$type='boolean'">is</xsl:when>
    <xsl:otherwise>get</xsl:otherwise>
    </xsl:choose>
</xsl:template>

</xsl:stylesheet>
[/code]

好了,完成以上工作之后,只要在cmd中,输入如下的命令行,就可以获得我们想要的结果了:
java org.apache.xalan.xslt.Process -in xmlSource  -xsl stylesheet -out outputfile 

这里列出结果:
[code]
/**
* This bean represents a product that the company offers to its
customers
* This class has been generated by the XSLT processor from the
metadata
*/
public class Product {

    /**
     * Creates a new instance of the Product bean
     */
    public Product() {}
         
         
    private int code;
         
    /**
     * Sets the product inventory code
     * @param code is the product inventory code
     */
    public void setCode(int code) {
        this.code = code;          
    }

    /**
     * Returns the product inventory code
     * @return the product inventory code
     */
    public int getCode() {
        return code;
    }

    private String name;
         
    /**
     * Sets the product name
     * @param name is the product name
     */
    public void setName(String name) {
        this.name = name;          
    }

    /**
     * Returns the product name
     * @return the product name
     */
    public String getName() {
        return name;
    }

    private boolean testedOnAnimals;
         
    /**
    * Sets the flag that indicates if the product was tested on animals
    * @param testedOnAnimals is the flag that indicates if the product
was tested on animals
    */
    public void setTestedOnAnimals(boolean testedOnAnimals) {
        this.testedOnAnimals = testedOnAnimals;          
    }

    /**
     * Returns the flag that indicates if the product was tested on
animals
     * @return the flag that indicates if the product was tested on
animals
     */
    public boolean isTestedOnAnimals() {
        return testedOnAnimals;
    }

    private java.util.Date availableSince;
         
    /**
     * Sets the date when the company started offering this product to
its customers
     * @param availableSince is the date when the company started
offering this product to its customers
     */
    public void setAvailableSince(java.util.Date availableSince) {
        this.availableSince = availableSince;          
    }

    /**
     * Returns the date when the company started offering this product
to its customers
     * @return the date when the company started offering this product
to its customers
     */
    public java.util.Date getAvailableSince() {
        return availableSince;
    }

}
[/code]

总结:
1. 在熟悉了xsl的基本使用之后,理解以上的内容并不是困难;
2. 这样做是比较适合预先知道了某些逻辑功能,但由于某种原因,需要动态生成,或者是为了节省不必要的重复工作,可以通过它自动生成代码;
3. 修改这个xsl比较方便。

分享到:
评论

相关推荐

    java中使用xslt转换xml成为另一个xml

    以下是一个简单的Java代码示例,演示了如何执行XML到XML的XSLT转换: ```java import javax.xml.transform.*; import javax.xml.transform.stream.*; import java.io.*; public class XsltTransformerExample { ...

    使用xsl来动态生成java代码

    3. **执行XSLT处理器**:最后,通过XSLT处理器(如Saxon、Xalan等)应用XSL模板到XML Schema上,从而生成Java源代码。处理器会根据XSL模板中的规则,读取XML Schema中的信息,并将其转换为Java代码。这个过程是动态...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    XSLT自动代码生成学习笔记

    通过理解XSLT的工作原理,开发者可以创建模板,将XML数据转化为符合特定编程语言规范的源代码。 1.2 **方法** 学习XSLT代码生成的方法主要包括理解XSLT的基本语法,熟悉XPath表达式,以及掌握如何利用JAXP(Java ...

    xml java 源代码

    本资源包含的是XML与Java相关的源代码,适合初学者和有经验的开发者学习和参考。 在Java中,处理XML主要有以下几种方式: 1. DOM(Document Object Model):这是一种将整个XML文档加载到内存中的方法,形成一个树...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    xml文件查看源代码

    要查看XML文件的源代码,你可以使用各种文本编辑器打开文件,但为了更好地分析和理解XML结构,推荐使用专业的XML查看器或IDE。比如,压缩包中的"XmlViewer"可能就是一个XML查看工具,它通常具备以下功能: 1. **...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    java 解析、生成 Excel XML 四个实例

    在Java编程中,处理Excel和XML文件是常见...总之,Java解析和生成Excel与XML的能力是开发中的重要技能,广泛应用于数据交换、报表生成和自动化测试等领域。通过实践以上四个实例,开发者能够更好地理解和掌握这些技术。

    Java.Web开发详解.书中例子的源代码

    书中例子的源代码”是针对《Java.Web开发详解-xml+xslt+jsp+servlet》这本书的实例代码,为读者提供了深入学习和实践的机会。通过分析这些源代码,我们可以掌握多种关键的技术点。 首先,Java Web开发是基于Java...

    《java XML应用程序设计》侯要红 栗松涛 教材源代码

    总的来说,这门课程和配套的源代码旨在帮助学习者掌握Java环境下处理XML的全方位技能,包括解析、生成、验证和转换XML文档,从而能够构建高效、灵活的数据交换系统和应用程序。通过深入研究这些源代码,开发者能够更...

    格式化xml字符串,并生成xml文件

    首先,我们有两个Java源代码文件,即`XMLFileUtil.java`和`XMLFormatUtil.java`。这些文件通常包含了处理XML数据的相关工具方法,可能包括读取XML文件、解析XML字符串、格式化XML以及生成新的XML文件等操作。 `...

    《xml高级编程》源代码

    通过分析这些源代码,我们可以深入了解XML的核心概念、解析与生成、验证、DOM和SAX处理模型、XPath和XSLT转换,以及更高级的应用。 1. **XML基础**:XML的基础知识包括语法规范,如元素、属性、命名空间、注释、...

    韩顺平.第二版java视频教程.XML.源代码

    源代码"中,你将学习如何在Java项目中使用XML进行数据操作。这可能包括以下几个方面: 1. **XML解析**:学习DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等不同解析器...

    java生成Xml文件

    在Java中生成XML文件是一项常见的任务,尤其是在需要与外部系统交互或存储结构化数据时。本文主要介绍如何使用Java自动生成带有适当缩进格式的XML文件。 #### 一、背景介绍 在使用Java标准库中的XML API(如JAXP)...

    XML教程(附有源代码)

    本教程旨在深入浅出地介绍XML的基础知识和核心应用,同时提供实战源代码供学习者实践。 一、XML基础 1. XML概述:XML设计目标是简化数据的共享和交换,其语法严格,易于机器解析和生成。XML文档由元素、属性、实体...

    XSLT-Mastering.XML.Transformations

    通过对项目的设计目标、文档结构、源代码分析,读者可以深入理解XSLT在真实世界中的应用方式。 总之,《XSLT:掌握XML转换》不仅是一本技术手册,更是一部引导读者从理论到实践全面掌握XSLT技能的指南。无论是初学...

    Code generation using XSLT.pdf

    - **Jalopy**:一个Java源代码格式化工具,用于统一代码风格。 #### 代码生成简介 代码生成是一种自动化技术,用于根据特定规则或模板自动生成源代码。这种方法在软件开发中具有诸多优势,例如减少手工编码工作量...

Global site tag (gtag.js) - Google Analytics