Javaxml学习笔记.docx
- 文档编号:2862208
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:13
- 大小:19.10KB
Javaxml学习笔记.docx
《Javaxml学习笔记.docx》由会员分享,可在线阅读,更多相关《Javaxml学习笔记.docx(13页珍藏版)》请在冰豆网上搜索。
Javaxml学习笔记
Java&xml学习笔记SAX篇
JSP教程-Java与XML
Java&XML学习笔记
1、需要软件
java,解析器(例如Xerces),API(例如SAX,DOM)
2、SAX机制
1)解析
StringxmlURI="c:
/test.xml";
StringvendorParserClass="org.apache.xerces.parsers.SAXParser";
XMLReaerreader=XMLReaderFactory.createXMLReader(vendorParserClass);
InputSourceinputSource=newInputSource(xmlURI);
reader.parse(inputSource);
这样一个xml文档解析过程就完成了。
因为SAX是采用时间处理机制来解析XML
文档的,在解析过程中会触发一些事件,也就是执行特定的方法,你可以实现
这些方法,就可以通过解析xml来做一些事情了
2)处理
SAX2.0定义的核心处理接口一共有
org.xml.sax.ContentHandler
org.xml.sax.ErrorHandler
org.xml.sax.DTDHandler
org.xml.sax.EntityResolver
这些接口是通过
org.xml.sax.XMLReader的setContentHandler(),setEroorHandler(),
setDTDHandler(),setEntityHandler()注册到解析器,这里面最重要的是
org.xml.sax.ContentHandler接口,它具体如下
publicinterfaceContentHandler{
publicvoidsetDocumentLocator(Locatorlocator);
publicvoidstartDocument()throwsSAXException;
publicvoidendDocument()throwsSAXException;
publicvoidstartPrefixMapping(Stringprefix,Stringuri)
throwsSAXException;
publicvoidendPrefixMapping(Stringprifix)
throwsSAXException;
publicvoidstartElement(StringnamespaceURI,StringlocalName,
StringqName,Attributesatts)throwsSAXException;
publicvoidendElement(StringnamespaceURI,StringlocalName,
StringqName)throwsSAXException;
publicvoidcharacters(charch[],intstart,intlength)
throwsSAXException;
publicvoidignorableWhitespace(charch[],intstart,intlength)
throwsSAXException;
publicvoidprocessingInstruction(Stringtarget,Stringdata)
throwsSAXException;
publicvoidskippedEntity(Stringname)
throwsSAXException;
}
通过setContentHandler()将你实现的ContentHandler注册给XMLReader之后,
在解析过程中,系统根据各种条件执行接口中的方法,下面简单说明一下
1)文档定位器
privateLocatorlocator;
publicvoidsetDocumentLocator(Locatorlocator){
this.locator=locator;
}
通常情况下,你只要如此实现就可以了,这个主要是得到当前解析的位置,
通过得到的locator,你可以使用它的getLineNumber(),getColumnName()等
方法,可以得到文档当前的位置,但要注意的是,这个locator不能保存,只
针对当前的解析有效
2)文档的开头和结尾
publicvoidstartDocument()throwsSAXException{
//解析过程中仅位于setDocumentLocator()方法后调用
}
publicvoidendDocument()throwsSAXException{
//解析过程中最后调用
}
大多数情况下你可以不用理他们,只要写个空方法就可以了
3)名字空间的开始和结束
publicvoidstartPrefixMapping(Stringprefix,Stringuri)
throwsSAXException{
}
publicvoidendPrefixMapping(Stringprifix)
throwsSAXException{
}
4)元素的开始和结束
publicvoidstartElement(StringnamespaceURI,StringlocalName,
StringqName,Attributesatts)throwsSAXException{
}
publicvoidendElement(StringnamespaceURI,StringlocalName,
StringqName)throwsSAXException{
}
5)元素的数据
publicvoidcharacters(charch[],intstart,intlength)
throwsSAXException{
Strings=newString(ch,start,length);
}
这个是得到当前的元素的文本数据
6)可以忽略的空白
publicvoidignorableWhitespace(charch[],intstart,intlength)
throwsSAXException{
}
7)实体
publicvoidskippedEntity(Stringname)
throwsSAXException{
}
8)指令处理
publicvoidprocessingInstruction(Stringtarget,Stringdata)
throwsSAXException{
}
3)例子:
这个是从Java&XML中复制过来的,
/*
*Createdon2004-11-30
*
*TODOTochangethetemplateforthisgeneratedfilegoto
*Window-Preferences-Java-CodeStyle-CodeTemplates
*/
packagejavaxml2;
/**
*@authoryuangfang
*
*TODOTochangethetemplateforthisgeneratedtypecommentgoto
*Window-Preferences-Java-CodeStyle-CodeTemplates
*/
importjava.io.*;
importjava.util.*;
importorg.xml.sax.*;
importorg.xml.sax.ext.LexicalHandler;
importorg.xml.sax.helpers.XMLReaderFactory;
importjava.awt.*;
importjavax.swing.*;
importjavax.swing.tree.*;
publicclassSAXTreeViewerextendsJFrame{
privateStringvendorParserClass="org.apache.xerces.parsers.SAXParser";
privateJTreejTree;
DefaultTreeModeldefaultTreeModel;
publicSAXTreeViewer(){
super("SAXTreeViewer");
setSize(600,450);
}
publicvoidinit(StringxmlURI)throwsIOException,SAXException{
DefaultMutableTreeNodebase=newDefaultMutableTreeNode("XMLDocument:
"+xmlURI);
defaultTreeModel=newDefaultTreeModel(base);
jTree=newJTree(defaultTreeModel);
buildTree(defaultTreeModel,base,xmlURI);
getContentPane().add(newJScrollPane(jTree),BorderLayout.CENTER);
}
publicvoidbuildTree(DefaultTreeModeltreeModel,DefaultMutableTreeNodebase,StringxmlURI)
throwsIOException,SAXException{
StringfeatureURI="";
try{
XMLReaderreader=XMLReaderFactory.createXMLReader(vendorParserClass);
ContentHandlerjTreeContentHandler=newJTreeContentHandler(treeModel,base);
ErrorHandlerjTreeErrorHandler=newJTreeErrorHandler();
reader.setContentHandler(jTreeContentHandler);
reader.setErrorHandler(jTreeErrorHandler);
reader.setEntityResolver(newSimpleEntityResolver());
featureURI="http:
//xml.org/sax/features/validation";
reader.setFeature(featureURI,true);
featureURI="http:
//xml.org/sax/features/nam
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Javaxml 学习 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)