Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Dùng SAX hiển thị tài liệu XML trên JSP với JSPWriter

Tạo file MyHandler.java với nội dung sau

package jaxp;

import java.io.IOException;

import javax.servlet.jsp.JspWriter;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

public class MyHandler extends DefaultHandler

{

private int stepCount, totalAge;

private JspWriter out;

private boolean insideAgeElement;

public MyHandler(JspWriter out)

{

this.out = out;

}

public void startDocument() throws SAXException

{

try

{

out.write(++stepCount + “. Start of document<br>”);

}

catch (IOException e)

{

throw new SAXException(e);

}

} // end of startDocument()

public void endDocument() throws SAXException

{

try

{

out.write(++stepCount + “. End of document<p>”);

out.write(“The total of all ages in the XML document is <b><i>”

+ totalAge + “</i></b>”);

}

catch (IOException e)

{

throw new SAXException(e);

}

} // end of endDocument()

public void startElement(String namespaceURI, String localName,

String qName, Attributes attrs)

throws SAXException

{

if ( qName.equals(“age”))

{

insideAgeElement = true;

}

try

{

out.write(++stepCount + “. Start of element: <b>” + qName + “</b>”);

int numberOfAttributes = attrs.getLength();

if ( numberOfAttributes > 0 )

{

out.write(“. Attributes: <ul>”);

} // end of if ()

else

out.write(“<br>”);

for ( int i=0; i<numberOfAttributes; i++)

{

out.write(“<li>” + attrs.getQName(i) + ” = “

+ attrs.getValue(i) + “</li>”);

} // end of for ()

if ( numberOfAttributes > 0 )

{

out.write(“</ul>”);

}

}

catch (IOException e)

{

throw new SAXException(e);

}

} // end of startElement()

public void endElement(String namespaceURI, String localName, String qName)

throws SAXException

{

if ( qName.equals(“age”) )

{

insideAgeElement = false;

}

try

{

out.write(++stepCount + “. End of element <b>” + qName + “</b><br>”);

}

catch (IOException e)

{

throw new SAXException(e);

} // end of try-catch

} // end of endElement()

public void characters(char[] chars, int start, int length) throws SAXException

{

String content = new String(chars, start, length);

if ( insideAgeElement )

{

int age = Integer.parseInt(content);

totalAge += age;

}

try

{

out.write(++stepCount + “. Character content = “);

if ( length > 0 )

out.write(“<b>” + content + “</b><br>”);

}

catch (IOException e)

{

throw new SAXException(e);

} // end of try-catch

} // end of characters()

} // end of class MyHandler

Tạo file index.jsp có nội dung sau

<%@page import=“jaxp.MyHandler”%>

<%@page import=“javax.xml.parsers.SAXParserFactory”%>

<%@page import=“javax.xml.parsers.SAXParser”%>

<html>

<head><title>JSP and SAX</title></head>

<body>

<%

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser parser = factory.newSAXParser();

MyHandler myHandler = new MyHandler(out);

parser.parse(http://localhost:8080/XML_JSP/ex3/cdcatalog.xml&#8221;,

myHandler);

%>

</body>

</html>

File dữ liệu cdcatalog.xml ở đây có dạng

<catalog>

<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>

<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>…

Kết quả hiển thị trên trình duyệt

https://vovanhai.files.wordpress.com/2008/09/sax02_jsp.png

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: