Javaxml学习笔记Word文档格式.docx
《Javaxml学习笔记Word文档格式.docx》由会员分享,可在线阅读,更多相关《Javaxml学习笔记Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
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)
publicvoidstartElement(StringnamespaceURI,StringlocalName,
StringqName,Attributesatts)throwsSAXException;
publicvoidendElement(StringnamespaceURI,StringlocalName,
StringqName)throwsSAXException;
publicvoidcharacters(charch[],intstart,intlength)
publicvoidignorableWhitespace(charch[],intstart,intlength)
publicvoidprocessingInstruction(Stringtarget,Stringdata)
publicvoidskippedEntity(Stringname)
}
通过setContentHandler()将你实现的ContentHandler注册给XMLReader之后,
在解析过程中,系统根据各种条件执行接口中的方法,下面简单说明一下
1)文档定位器
privateLocatorlocator;
publicvoidsetDocumentLocator(Locatorlocator){
this.locator=locator;
通常情况下,你只要如此实现就可以了,这个主要是得到当前解析的位置,
通过得到的locator,你可以使用它的getLineNumber(),getColumnName()等
方法,可以得到文档当前的位置,但要注意的是,这个locator不能保存,只
针对当前的解析有效
2)文档的开头和结尾
publicvoidstartDocument()throwsSAXException{
//解析过程中仅位于setDocumentLocator()方法后调用
publicvoidendDocument()throwsSAXException{
//解析过程中最后调用
大多数情况下你可以不用理他们,只要写个空方法就可以了
3)名字空间的开始和结束
throwsSAXException{
throwsSAXException{
4)元素的开始和结束
StringqName,Attributesatts)throwsSAXException{
StringqName)throwsSAXException{
5)元素的数据
Strings=newString(ch,start,length);
这个是得到当前的元素的文本数据
6)可以忽略的空白
7)实体
8)指令处理
3)例子:
这个是从Java&
XML中复制过来的,
/*
*Createdon2004-11-30
*
*TODOTochangethetemplateforthisgeneratedfilegoto
*Window-Preferences-Java-CodeStyle-CodeTemplates
*/
packagejavaxml2;
/**
*@authoryuangfang
*TODOTochangethetemplateforthisgeneratedtypecommentgoto
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="
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);
//xml.org/sax/features/nam