`
xiaobashagua
  • 浏览: 12668 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用xsl来动态生成java代码

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

这里首先给一个xml例子,我们将通过一个xsl从该xml文件中抽取有用的信息来生成java代码(实际上是一个javabean):
以下内容为程序代码:

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


下面我就直接给出转换的xsl,如果大家对xsl不是很了解的话,可以先看一些资料,了解之后就会明白了。我在里面稍微做了些注释:
以下内容为程序代码:

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


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

这里列出结果:
以下内容为程序代码:

/**
* 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;
}

}


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

相关推荐

    基于java根据模板动态生成PDF文件

    本主题聚焦于使用Java编程语言,结合特定的库或框架,根据预定义的模板来动态生成PDF文件。以下是关于这个主题的详细知识讲解。 一、Java与PDF生成 Java作为一门广泛使用的后端开发语言,提供了丰富的库来处理PDF...

    动态生成Java Bean测试页面

    在实际应用中,开发者可能会结合使用上述技术来实现动态生成Java Bean的测试页面。通过这种方式,他们可以快速验证Bean类的各个属性是否工作正常,而无需手动编写大量的测试代码。如果要深入学习这个话题,建议访问...

    WEB图形格式SVG及基于XML+XSL的动态生成技术

    虽然SVG的动态生成可以直接通过编程语言(如Java、JSP、Perl等)实现,但这种方法往往导致代码、数据和表现形式的混杂,不易维护和扩展。为了解决这一问题,XML(可扩展标记语言)和XSL(可扩展样式表语言)的组合...

    xml xsl网页生成

    总结来说,“xml xsl网页生成”是一个涉及XML结构化数据与XSL样式表转换的实践过程,通过这一技术,我们可以将复杂的数据结构转化为用户友好的网页展示形式,广泛应用于数据交换、动态网页生成和文档转换等多个领域...

    javaxml,xsl,html文件转换.pdf

    Java XML、XSL 和 HTML 文件转换技术详解 本文档主要讲解了 Java ...我们可以使用 Java 将 XML 文件转换为 HTML 文件,并使用 XSL 模板来定义转换的规则。在实际应用中,我们可以使用这种技术来实现数据的转换和交换。

    利用xml和xsl自动生成菜单

    通过分析这些文件,我们可以更深入地了解XML和XSL的实际应用,学习如何结合这两者来创建动态、自适应的菜单系统。这是一项实用的技能,对于开发基于Web的应用程序,特别是那些需要复杂用户界面的项目,具有很高的...

    java读取xsl文件,读取文档

    在本案例中,我们有一个名为"java读取xls文件.txt"的文本文件,它可能包含了Java代码示例,用于演示如何读取XSL文件。此外,还有一个名为"jxl.jar"的库,这通常是Java Excel API的压缩包,虽然标题提到了XSL,但这里...

    JAVA 下载XSL文件代码,用的是SpringMVC框架,其它架框类似的

    #### 2.1 使用Apache POI库生成Excel文件 - **背景**:Apache POI是一个用于读写Microsoft Office格式文件(如Excel)的Java API。 - **实现过程**: - **创建HSSFWorkbook对象**:使用`workBook.createSheet()`...

    cgn:在 XSL 中实现的代码生成工具

    该项目使使用 XSL 处理器为它们生成 Java 源代码( 变体)和 Json 解析器/gerenartor(基于 )变得简单。 开发的Saxon XSLT和XQuery处理器。 应该安装才能使用 cgn。 请在目录中提供的 *.sh 文件中指定 Saxon ...

    oracle的xsl-fo报表java jlib包1

    从BIPublisher11中提出的其中java lib包。 手动调用其API,可以查看从rtf模板生成的xsl-fo代码。

    oracle的xsl-fo报表java jlib包2

    从BIPublisher11中提出的其中java lib包。 手动调用其API,可以查看从rtf模板生成的xsl-fo代码。

    使用xsl导出excel源码示例

    这个过程可能涉及编程语言(如Java、Python或C#)来调用XSLT处理器,或者使用命令行工具如`xsltproc`或`msxsl.exe`。 7. **应用场景**:这种技术常用于自动化数据报告、数据迁移或从XML数据源生成用户友好的Excel...

    Fop生成pdf(xsl)

    总的来说,Fop生成pdf(xsl)涉及的知识点涵盖了XML、XSL-FO、XSLT、PDF格式以及Apache FOP的使用。掌握这些技术,可以帮助开发者创建高质量的、版式固定的PDF文档,尤其适用于报表、手册、书籍等需要精确定位布局的...

    xsl转化为html的示例代码和文件

    要将这个XSLT应用到XML文件,你可以使用如Java的`javax.xml.transform`库或命令行工具如`xsltproc`。例如,假设你的XML文件名为`books.xml`,XSLT文件名为`transform.xsl`,在命令行中可以运行以下命令: ``` ...

    用XSL把XML转化在EXCEL导出

    标题中的“用XSL把XML转化在EXCEL导出”是指使用XSL(Extensible Stylesheet Language)转换技术,将XML(Extensible Markup Language)数据转换成Excel电子表格格式的过程。这种转换通常是为了便于数据分析、报表...

    Java条形码生成库 Barcode4J

    Barcode4J 提供了一个简单的Java API,使得开发者可以方便地在Java代码中生成条形码。API提供了创建、设置参数和生成条形码图像的功能,可以集成到任何Java应用程序中。 ### 5. XSL-FO 扩展 Barcode4J 还作为XSL...

    spring boot xsl

    通过编写Java代码或者利用已有的服务,开发者可以方便地实现XML数据的动态转换,适应不同的业务需求。在实际项目中,选择合适的工具和库,如Saxon,能够进一步提升开发效率和转换性能。对于压缩包中的"Spring3...

    java URL转PDF文件

    在Java中,我们可以使用`java.net.URL`和`java.net.HttpURLConnection`类来实现。以下是一个简单的示例: ```java URL url = new URL("http://example.com"); HttpURLConnection connection = (HttpURLConnection) ...

Global site tag (gtag.js) - Google Analytics