免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 970 | 回复: 0
打印 上一主题 下一主题

使用SAX解析XML [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-18 12:49 |只看该作者 |倒序浏览

SAX我居然都弄混了~哎
ReadXmlDemo.java
import java.io.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class ReadXmlDemo extends DefaultHandler {
    public static void main(String[] arguments) {
        if (arguments.length > 0){
     ReadXmlDemo read = new ReadXmlDemo(arguments[0]);
} else {
     System.out.println("Usage: java ReadXmlDemo filename");
}
    }
    ReadXmlDemo(String xmlFile) {
        File input = new File(xmlFile);
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
try {
     SAXParser sax = factory.newSAXParser();
     sax.parse(input, new XmlHandler() );
} catch (ParserConfigurationException pce) {
     System.out.println("Could not create that parser.");
     System.out.println(pce.getMessage());
} catch (SAXException saxe) {
     System.out.println("Problem with the SAX parser.");
     System.out.println(saxe.getMessage());
} catch (IOException ioe) {
     System.out.println("Error reading file.");
     System.out.println(ioe.getMessage());
}
    }
}
class XmlHandler extends DefaultHandler {
    static int READING_NAME = 1;
    static int READING_SEX = 2;
    static int READING_BIRTH = 3;
    static int READING_NOTHING = 0;
    int currentActivity = READING_NOTHING;
    ReadXml xml = new ReadXml();
    XmlHandler() {
        super();
    }
    public void startElement(String uri, String localName, String qName, Attributes attributes) {
   
        if (qName.equals("title"))
            currentActivity = READING_NAME;
else if (qName.equals("file"))
     currentActivity = READING_SEX;
//else if (qName.equals("Birth"))
     //currentActivity = READING_BIRTH;
    }
    public void characters(char[] ch, int start, int length) {
        String value = new String(ch, start, length);
if (currentActivity == READING_NAME)
     xml.name = value;
if (currentActivity == READING_SEX)
     xml.sex = value;
//if (currentActivity == READING_BIRTH)
     //xml.birth = value;
    }
    public void endElement(String uri, String localName, String qName) {
        if (qName.equals("page")) {
     System.out.println("
Name: "+xml.name);
     System.out.println("Sex: "+xml.sex);
     //System.out.println("Birth: "+xml.birth);
     xml = new ReadXml();
}
    }
}
class ReadXml {
    String name;
    String sex;
    String birth;
}


SaxParsePage.java
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;
/**
*
Title: 使用SAX解析XML
*
Description: 使用SAX接口解析book.xml文件
*
Copyright: Copyright (c) 2003
*
Filename: SaxParsePage.java
* @version 1.0
*/
public class SaxParsePage extends DefaultHandler {
/**
*
方法说明:主方法,声明解析工厂和加载XML文件
*
输入参数:
*
返回类型:
*/
  public static void main(String[] argv) {
    try {
      //建立SAX解析工厂
      SAXParserFactory spfactory = SAXParserFactory.newInstance();
      //生成SAX解析对象
      SAXParser parser = spfactory.newSAXParser();
      //指定XML文件,进行XML解析
      parser.parse(new File("book.xml"), new SaxParsePage());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
/**
*
方法说明:文件打开时调用
*
输入参数:
*
返回类型:
*/
  public void startDocument() {
    System.out.println("***开始解析***");
  }
/**
*
方法说明:当遇到开始标记时调用
*
输入参数:
*
返回类型:
*/
  public void startElement(String uri,
                           String localName,
                           String qName,
                           Attributes attributes) throws SAXException {
    System.out.println("节点开始:" + qName);
    for(int i=0;i<attributes.getlength();i++){
     System.out.println("节点属性名称:" + attributes.getQName(i));
     System.out.println("节点属性值:"+attributes.getValue(i));
    }
  }
/**
*
方法说明:当分析器遇到无法识别为标记或者指令类型字符时调用
*
输入参数:
*
返回类型:
*/
  public void characters(char[] ch,
                         int offset,
                         int length) throws SAXException{
    System.out.println("节点数据:" + new String(ch, offset, length));
  }
/**
*
方法说明:当遇到节点结束时调用
*
输入参数:
*
返回类型:
*/
  public void endElement(String uri,
                         String localName,
                         String qName) {
    System.out.println("节点结束:" + qName);
  }
/**
*
方法说明:当到文档的末尾调用
*
输入参数:
*
返回类型:
*/
  public void endDocument() {
    System.out.println("****文件解析完毕****");
  }
}
http://www.54bk.com/more.asp?name=kunyliu


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/5142/showart_36284.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP