Top
首页 > 老文章 > 正文

用Xalan在IE中浏览XML文件

在用XML表达数据时,常常需要把XML里的数据用一定的格式显示出来。Apache里面的Xalan能够把XML里的数据转换为不同格式的文件... 
发布时间:2002-11-18 10:11        来源:        作者:梁邦勇
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文件后返回给浏览器。 (责任编辑 Sunny)  
加载更多

专题访谈

合作站点
stat