Friday, April 6, 2007

用xalan在ie中浏览xml文件

用xalan在ie中浏览xml文件
文章出处:www.ccidnet.com 作者:�   发布时间:2004-12-28   点击:0
 

  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: