JSP解析XML文件一、配置环境 1、要想使用JSP解析XML文件,首先要先配置好一个运行环境。首先要找到Sun公司对于XML的Java API。可以在SUN的网站下载(文件名:jaxp-1_0_1.zip;文件大小:857,807 bytes)。
不过现在很多服务器都有这个API,例如Resin v2.1在里面的lib目录下的jaxp.jar文件就可以使用。
2、在CLASSPATH配置
把X:\Resin\lib或者存放这个API文件的路径加到CLASSPATH里面(具体不细说了)。二、包含的文件 1、SAXHandler.java源文件import java.io.*;
import java.util.Hashtable;
import org.xml.sax.*;
public class SAXHandler extends HandlerBase
{
private Hashtable table = new Hashtable();
private String currentElement = null;
private String currentValue = null;
public void setTable(Hashtable table)
{
this.table = table;
}
public Hashtable getTable()
{
return table;
}
public void startElement(String tag, AttributeList attrs)
throws SAXException
{
currentElement = tag;
}
public void characters(char[] ch, int start, int length)
throws SAXException
{
currentValue = new String(ch, start, length);
}
public void endElement(String name) throws SAXException
{
if (currentElement.equals(name))
table.put(currentElement, currentValue);
}
2、XmlTest.jsp源代码<HTML>
<HEAD>
<TITLE>JSP test</TITLE>
</HEAD>
<BODY>
<%@ page errorPage="ErrPage.jsp"
contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.Hashtable" %>
<%@ page import="org.w3c.dom.*" %>
<%@ page import="org.xml.sax.*" %>
<%@ page import="javax.xml.parsers.SAXParserFactory" %>
<%@ page import="javax.xml.parsers.SAXParser" %>
<%@ page import="SAXHandler" %>
<%
File file = new File("/myjsp/item.xml");
FileReader reader = new FileReader(file);
Parser parser;
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
SAXHandler handler = new SAXHandler();
sp.parse(new InputSource(reader), handler);
Hashtable cfgTable = handler.getTable();
out.println("<TABLE><CAPTION>XML ITEM对象</CAPTION>");
out.println("<TR><TD>ID</TD>" +
"<TD>" +
(String)cfgTable.get(new String("ID")) + "</TD></TR>");
out.println("<TR><TD>DESCRIPTION</TD>" +
"<TD>" +
(String)cfgTable.get(new String("DESCRIPTION"))+"</TD></TR>");
out.println("<TR><TD>PRICE</TD>" +
"<TD>" +
(String)cfgTable.get(new String("PRICE")) + "</TD></TR>");
out.println("<TR><TD>QUANTITY</TD>" +
"<TD>" +
(String)cfgTable.get(new String("QUANTITY")) + "</TD></TR>");
out.println("</TABLE>");
%>
</BODY>
</HTML> 3、item.xml源代码<?xml version="1.0"?>
<INFO>
<NAME>ICECH</NAME>
<SEX>MALE</SEX>
<AGE>26</AGE>
</INFO>三、编译运行 1、编译SAXHandler.java文件
将SAXHandler.class放到WEB-INF\classes目录。 2、运行XmlTest.jsp就能看到XML文件显示的内容了。四、扩展程序 1、XmlFile.html源代码<HTML>
<HEAD>
<TITLE>XML</TITLE>
</HEAD>
<BODY>
<FORM ACTION="XmlFile.jsp" METHOD="post">
XML:<INPUT TYPE="TEXT" NAME="name" SIZE=20>
<INPUT TYPE="SUBMIT" NAME="submit" VALUE="ok">
</FORM>
</BODY>
</HTML> 2、XmlFile.jsp源代码<HTML>
<HEAD>
<TITLE>XML</TITLE>
</HEAD>
<BODY>
<%@ page
contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="org.w3c.dom.*" %>
<%@ page import="org.xml.sax.*" %>
<%@ page import="javax.xml.parsers.SAXParserFactory" %>
<%@ page import="javax.xml.parsers.SAXParser" %>
<%@ page import="SAXHandler" %>
<%
String name = request.getParameter("name");
File file = new File("/myjsp/"+name);
FileReader reader = new FileReader(file);
Parser parser;
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
SAXHandler handler = new SAXHandler();
sp.parse(new InputSource(reader), handler);
Hashtable hashTable = handler.getTable();
out.println("<TABLE BORDER=2><CAPTION>XML对象</CAPTION>");
Enumeration enum = hashTable.keys();
while (enum.hasMoreElements())
{
String id = (String)enum.nextElement();
String value = (String)hashTable.get(id);
out.println("<TR><TD>" + id + "</TD>" +
"<TD>" + value + "</TD></TR>");
}
out.println("</TABLE>");
%>
</BODY>
</HTML> 3、SAXHandler.java源文件 同上 4、item.xml源代码 同上 运行方式也一样。
不过现在很多服务器都有这个API,例如Resin v2.1在里面的lib目录下的jaxp.jar文件就可以使用。
2、在CLASSPATH配置
把X:\Resin\lib或者存放这个API文件的路径加到CLASSPATH里面(具体不细说了)。二、包含的文件 1、SAXHandler.java源文件import java.io.*;
import java.util.Hashtable;
import org.xml.sax.*;
public class SAXHandler extends HandlerBase
{
private Hashtable table = new Hashtable();
private String currentElement = null;
private String currentValue = null;
public void setTable(Hashtable table)
{
this.table = table;
}
public Hashtable getTable()
{
return table;
}
public void startElement(String tag, AttributeList attrs)
throws SAXException
{
currentElement = tag;
}
public void characters(char[] ch, int start, int length)
throws SAXException
{
currentValue = new String(ch, start, length);
}
public void endElement(String name) throws SAXException
{
if (currentElement.equals(name))
table.put(currentElement, currentValue);
}
2、XmlTest.jsp源代码<HTML>
<HEAD>
<TITLE>JSP test</TITLE>
</HEAD>
<BODY>
<%@ page errorPage="ErrPage.jsp"
contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.Hashtable" %>
<%@ page import="org.w3c.dom.*" %>
<%@ page import="org.xml.sax.*" %>
<%@ page import="javax.xml.parsers.SAXParserFactory" %>
<%@ page import="javax.xml.parsers.SAXParser" %>
<%@ page import="SAXHandler" %>
<%
File file = new File("/myjsp/item.xml");
FileReader reader = new FileReader(file);
Parser parser;
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
SAXHandler handler = new SAXHandler();
sp.parse(new InputSource(reader), handler);
Hashtable cfgTable = handler.getTable();
out.println("<TABLE><CAPTION>XML ITEM对象</CAPTION>");
out.println("<TR><TD>ID</TD>" +
"<TD>" +
(String)cfgTable.get(new String("ID")) + "</TD></TR>");
out.println("<TR><TD>DESCRIPTION</TD>" +
"<TD>" +
(String)cfgTable.get(new String("DESCRIPTION"))+"</TD></TR>");
out.println("<TR><TD>PRICE</TD>" +
"<TD>" +
(String)cfgTable.get(new String("PRICE")) + "</TD></TR>");
out.println("<TR><TD>QUANTITY</TD>" +
"<TD>" +
(String)cfgTable.get(new String("QUANTITY")) + "</TD></TR>");
out.println("</TABLE>");
%>
</BODY>
</HTML> 3、item.xml源代码<?xml version="1.0"?>
<INFO>
<NAME>ICECH</NAME>
<SEX>MALE</SEX>
<AGE>26</AGE>
</INFO>三、编译运行 1、编译SAXHandler.java文件
将SAXHandler.class放到WEB-INF\classes目录。 2、运行XmlTest.jsp就能看到XML文件显示的内容了。四、扩展程序 1、XmlFile.html源代码<HTML>
<HEAD>
<TITLE>XML</TITLE>
</HEAD>
<BODY>
<FORM ACTION="XmlFile.jsp" METHOD="post">
XML:<INPUT TYPE="TEXT" NAME="name" SIZE=20>
<INPUT TYPE="SUBMIT" NAME="submit" VALUE="ok">
</FORM>
</BODY>
</HTML> 2、XmlFile.jsp源代码<HTML>
<HEAD>
<TITLE>XML</TITLE>
</HEAD>
<BODY>
<%@ page
contentType="text/html;charset=gb2312" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="org.w3c.dom.*" %>
<%@ page import="org.xml.sax.*" %>
<%@ page import="javax.xml.parsers.SAXParserFactory" %>
<%@ page import="javax.xml.parsers.SAXParser" %>
<%@ page import="SAXHandler" %>
<%
String name = request.getParameter("name");
File file = new File("/myjsp/"+name);
FileReader reader = new FileReader(file);
Parser parser;
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
SAXHandler handler = new SAXHandler();
sp.parse(new InputSource(reader), handler);
Hashtable hashTable = handler.getTable();
out.println("<TABLE BORDER=2><CAPTION>XML对象</CAPTION>");
Enumeration enum = hashTable.keys();
while (enum.hasMoreElements())
{
String id = (String)enum.nextElement();
String value = (String)hashTable.get(id);
out.println("<TR><TD>" + id + "</TD>" +
"<TD>" + value + "</TD></TR>");
}
out.println("</TABLE>");
%>
</BODY>
</HTML> 3、SAXHandler.java源文件 同上 4、item.xml源代码 同上 运行方式也一样。
解决方案 »
- JSP调用Servlet为什么不显图片?
- struts2注销session问题 标签问题 (在线等)
- form使用了multipart/form-data,但是文件选择里没有选择任何文件,submit后,heap memory还是在增加
- 关于jsp服务器的两个问题
- weblogic + JBuilder用Struts架构出现的问题,高手们帮帮忙
- 关于post的问题
- String catalinaHome = System.getProperty("catalina.home");
- 第一个jsp文件错误!
- struts2启动是报错 求各位大神帮我分析一下
- 如何在JSP中实现日期选择功能,并把所选日期存储在数据库里?
- 我用的是resin-2.1.2,启动的时候,能不能不弹出那个小的window窗口,而只显示那个dos窗口????
- 关于JSP环境的问题
如果你用的是jdk1.4那么jaxp己经在里面了,如果是1.3就要重新设。
import org.xml.sax.*;public class JAXPSAX{
import javax.xml.parsers.*;
import org.xml.sax.*;public class JAXPSAX{
public void parsing(){
SAXParser parser;
SAXparserFactory factory=SAXParserFactory.newInstance();
HandlerBase myHandler=new MyHandlerBase();//自己写的处理器
try{
parser=factory.newSAXParser();
parser.parse(myURI,myHandler);
}catch(Exception e){}
}
}