<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      使用xsl來動態生成java代碼

      [摘要]xsl本身就是一個構型良好的xml,它能夠把一個xml文檔轉換成另外一個xml文檔,或者轉換成文本文件、html文件等等。這里就是利用xsl來動態的生成我們想要的java文件(從某種角度看,java...
      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比較方便。

      sjoy


      日韩精品一区二区三区高清