橘子味的心
标题:JSP处理XML数据

当通过HTTP发送XML数据时,使用JSP处理传入和传出的XML文档是有意义的; 例如RSS文档。 由于XML文档只是一堆文本,通过JSP创建一个文本文档比创建HTML文档要容易得多。

从JSP发送XML

可以使用JSP以与发送HTML相同的方式发送XML内容。 唯一的区别是必须将页面的内容类型设置为text/xml。 要设置内容类型,请使用<%@ page%>标签,如下所示:

  1. <%@ page contentType = "text/xml" %>
  2. HTML

以下示例是展示如何将XML内容发送到浏览器 -

  1. <%@ page contentType = "text/xml" %>
  2.  
  3. <books>
  4. <book>
  5. <name>Padam History</name>
  6. <author>Maxsu</author>
  7. <price>198</price>
  8. </book>
  9. </books>
  10. HTML

在JSP中处理XML

为了更好地演示,打开Eclipse创建一个动态Web项目:XmlData,其目录结构如下 -

在使用JSP进行XML处理之前,需要将以下两个XML和XPath相关的库复制到<Tomcat安装目录>\lib中,或者复制到{webapp}/WEB-INFO/lib目录下 -

将以下内容放在books.xml文件中 -

  1. <books>
  2. <book>
  3. <name>Padam History</name>
  4. <author>Maxsu</author>
  5. <price>198</price>
  6. </book>
  7.  
  8. <book>
  9. <name>Great Mistry</name>
  10. <author>NewWong</author>
  11. <price>1000</price>
  12. </book>
  13. </books>
  14. XML

创建一个read_xml.jsp,保存在Web应用目录中 -

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  4. <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
  5.  
  6. <html>
  7. <head>
  8. <title>JSP+XML</title>
  9. </head>
  10. <body>
  11. <div style="margin: auto; width: 90%">
  12. <h3>图书信息:</h3>
  13. <c:import var="bookInfo" url="http://localhost:8080/XmlData/books.xml" />
  14. <x:parse xml="${bookInfo}" var="output" />
  15. <b>The title of the first book is</b>:
  16. <x:out select="$output/books/book[1]/name" />
  17. <br /> <b>The price of the second book</b>:
  18. <x:out select="$output/books/book[2]/price" />
  19. </div>
  20. </body>
  21. </html>
  22. HTML

在编写完成上面的代码后,部署项目并打开浏览器访问URL:http://localhost:8080/XmlData/read_xml.jsp 访问上述JSP,将显示以下结果 -

使用JSP格式化XML

考虑以下XSLT样式表文件:style.xsl -

  1. <?xml version = "1.0"?>
  2. <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
  3. version = "1.0">
  4.  
  5. <xsl:output method = "html" indent = "yes"/>
  6. <xsl:template match = "/">
  7. <html>
  8. <body>
  9. <xsl:apply-templates/>
  10. </body>
  11. </html>
  12. </xsl:template>
  13.  
  14. <xsl:template match = "books">
  15. <table border = "1" width = "100%">
  16. <xsl:for-each select = "book">
  17. <tr>
  18. <td>
  19. <i><xsl:value-of select = "name"/></i>
  20. </td>
  21.  
  22. <td>
  23. <xsl:value-of select = "author"/>
  24. </td>
  25.  
  26. <td>
  27. <xsl:value-of select = "price"/>
  28. </td>
  29. </tr>
  30. </xsl:for-each>
  31. </table>
  32.  
  33. </xsl:template>
  34. </xsl:stylesheet>
  35. XML

创建一个JSP文件:formatxml.jsp

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  4. <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  9. <title>使用JSP格式化XML</title>
  10. </head>
  11. <body>
  12. <div style="margin:auto;width:90%">
  13. <h3>图书信息:</h3>
  14. <c:set var = "xmltext">
  15. <books>
  16. <book>
  17. <name>Padam History</name>
  18. <author>Maxsu</author>
  19. <price>99</price>
  20. </book>
  21.  
  22. <book>
  23. <name>Great Mistry</name>
  24. <author>NewWong</author>
  25. <price>1998</price>
  26. </book>
  27. </books>
  28. </c:set>
  29.  
  30. <c:import url = "http://localhost:8080/XmlData/style.xsl" var = "xslt"/>
  31. <x:transform xml = "${xmltext}" xslt = "${xslt}"/>
  32. </div>
  33. </body>
  34. </html>
  35. HTML

在编写完成上面的代码后,部署项目并打开浏览器访问URL:http://localhost:8080/XmlData/formatxml.jsp 访问上述JSP,将显示以下结果 -

要了解更多有关使用JSTL的XML处理,可以查看JSP标准库