xml(extensible markup language)自从出现以来,因为良好的表达数据格式能力和扩展性,被广泛地用于数据的表达、传输和行业标准的定义中,尤其常用于表示internet上的数据。在用xml表达数据时,常常需要把xml里的数据用一定的格式显示出来,例如通过ie中的表格方式进行显示。apache里面的xalan就是这样一个优秀的工具,它能够把xml里的数据转换为不同格式的文件,甚至能够将xml和样式表转换为html文件。xalan可以在 http://xml.apache.org/xalan-j网址获得。 下面我们从xml和它的样式表讲起,看看xalan是如何的强大和方便的。 xml文件和样式表 xml文件需要用一定的格式表示出来,这就需要样式表,现在的样式表一般是一个.xsl文件。在样式表中能够使用html的元素,比如下面的xml文件: <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="sample.xsl"?> <info> <person> <name>aaa</name> <age>24</age> <addr>one</addr> </person> <person> <name>bbb</name> <age>25</age> <addr>two</addr> </person> </info> | 这时如果我们加入样式表,ie就能够以不同的方式显示上面xml文件里面的内容。ie的工作方式如图1。  图1 ie工作方式图 <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform " version="1.0"> <xsl:template match="/"> <html> <body> <xsl:apply-templates select="info" /> </body> </html> </xsl:template> <xsl:template match="info"> <table> <th>name</th> <th>age</th> <th>address</th> <xsl:apply-templates select="person" /> </table> </xsl:template> <xsl:template match="person"> <tr> <td><xsl:value-of select="name" /></td> <td><xsl:value-of select="age" /></td> <td><xsl:value-of select="addr" /></td> </tr> </xsl:template> </xsl:stylesheet> | 从上面代码中可以看到,这个xsl文件里面包含的是html的元素。其中<xsl:template match="/">表示解析到xml文件的根元素时生成的区段代码。xsl文件中生成的是html文件的头信息。<xsl:apply-templates select="info" />的意思是当解析xml文件<info>这个元素时,生成它下面描述的代码。xsl文件中生成的是html中的表格格式,包括表格头。<xsl:apply-templates select="person" />的意思是在解析xml文件中<person>这个元素时生成它描述的代码,这里生成的是html中表格的数据。<xsl:value-of select="name" />是将<name>这个元素描述的值取出来,得到的就是"aaa"和"bbb"。 编辑好xml文件和xsl文件后,将上面两个文件放在同一个目录下,用ie打开这个xml文件,结果如图2。  图2 ie打开xml文件显示图 使用程序实现xml+xsl=html 有时候,我们需要在程序中做xml+xsl=html这种转换。这时候就可以用apache提供的xalan。xalan是一个非常优秀的、用于xml转换的api,使用来很方便。同时它还提供了现成的程序,直接使用它附带的程序也可以进行这种转换。 xalan中有很多类,其中包括xml的解析类,可以用这个类做解析xml的工作。xalan最核心的类还是javax. // 将xalan里所用的包import进来 import javax.xml.transform.transformerfactory; import javax.xml.transform.transformer; import javax.xml.transform.stream.streamsource; import javax.xml.transform.stream.streamresult; import javax.xml.transform.transformerexception; import javax.xml.transform.transformer configurationexception; // 将需要的java类import进来 import java.io.fileoutputstream; import java.io.filenotfoundexception; import java.io.ioexception; public class simpletransform { public static void main(string[] args) throws transformerexception, transformerconfigurationexception, filenotfoundexception, ioexception { //创建一个类transformer的类厂 transformerfactory tfactory = transformerfactory.newinstance(); //用该类厂创建一个transformer的实例 transformer transformer = tfactory.newtransformer(new streamsource("sample.xsl")); //调用transformer类的transform函数完成转换 transformer.transform(new streamsource("sample.xml"), new streamresult(new fileoutputstream("sample.html"))); //打印出信息,告诉用户结果在sample.html文件中 system.out.println("************* the result is in sample.html *************"); } } | 编译并且运行该程序,就可以在相同的目录下看见sample.html文件。用ie打开该文件,和上面用ie打开sample.xml文件的结果是一样的。有时在网络上发布信息时,可以提供给用户不同的视图。我们事先做好一些不同的xsl模板,然后根据用户的需要将xml和不同的xsl生成的html返回给用户,这样就可以在服务器端将数据和视图分开,根据用户的不同请求返回不同的视图了。 web方式的使用方法 图3是以web方式使用xalan的常用方法。  图3 web方式使用xalan的方法图 在web浏览的时候,用户通过浏览器向服务器提交自己的http请求,然后由服务器的jsp程序解析用户的请求,根据用户的请求生成相应的html文件后返回给浏览器。
|
No comments:
Post a Comment