在j2ee1.4标准教材里看到一个很有趣的例子,从任意数据结构生成XML解析器产生SAX事件.数据结构可以是文本文件,PDF格式文档等.关键是自己解析这些数据源.另外一个有意思的地方是观察者模式的应用.所以就粗糙的改了一下并完整到可以测试运行.观察者模式简略UML图:
具体实现 被观察者对象ParseXMLSubject类:
package test;
import java.io.*;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.*;
public class ParseXMLSubject implements XMLReader {
ContentHandler handler;
String nsu = "";
Attributes atts = new AttributesImpl();
String rootElement = "addressbook";
String indent = "\n ";
public ParseXMLSubject(){
}
public ContentHandler getContentHandler() {
return handler;
}
public void parse(InputSource input) throws IOException, SAXException {
try {
// Get an efficient reader for the file
java.io.Reader r = input.getCharacterStream();
BufferedReader br = new BufferedReader(r);
// Read the file and display it's contents.
String line = br.readLine();
while (null != (line = br.readLine())) {
if (line.startsWith("email:")) {
break;
}
}
if (handler == null) {
throw new SAXException("No content handler");
}
// Note:
// We're ignoring setDocumentLocator(), as well
handler.startDocument();
handler.startElement(nsu, rootElement, rootElement, atts);
output("email", line);
line = br.readLine();
output("html", line);
line = br.readLine();
output("firstname", line);
line = br.readLine();
output("lastname", line);
line = br.readLine();
output("work", line);
line = br.readLine();
output("home", line);
line = br.readLine();
output("fax", line);
line = br.readLine();
output("pager", line);
line = br.readLine();
output("cell", line);
handler.ignorableWhitespace("\n".toCharArray(), 0, // start index
1 // length
);
handler.endElement(nsu, rootElement, rootElement);
handler.endDocument();
} catch (Exception e) {
e.printStackTrace();
}
}
public void parse(String systemId) throws IOException, SAXException {
}
public DTDHandler getDTDHandler() {
return null;
}
public EntityResolver getEntityResolver() {
return null;
}
相关专题
- 讨论J2EE建议的学习路线! (2次浏览)
- 分析J2EE架构的6个最佳实践 (1次浏览)
- 微软冲击移动平台市场J2ME何去何从 (0次浏览)
- 开发工具王者比拼 .NET单挑J2EE (0次浏览)
- 教您怎样部署基于WebSphere的J2EE应用 (0次浏览)
- 华山论剑 J2EE单挑.NET之框架组件篇 (0次浏览)
- 对J2EE项目实际应用的一点体会 (0次浏览)
- J2EE综合:介绍编写XML文档的工作经验 (0次浏览)
- J2ME手机游戏:获取RecordStore相关信息 (0次浏览)
- J2EE综合——Struts常见错误的全面汇总 (0次浏览)




