-- 作者:0messiah
-- 发布时间:11/2/2007 12:02:00 AM
-- sax新手,一个简单的问题
package xmlsax; import java.io.File; import java.io.IOException; import java.util.*; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * * @author Administrator */ public class XMLParser extends DefaultHandler{ Stack tags; int count; private static String sex; private String name; private String brith; private String pro; private String grade; private String classname; private String ElementName; private String proat; /** Creates a new instance of XMLParser */ public XMLParser() { count = 0; } public void characters(char[] ch,int start,int length) { String tagBodyText=new String(ch,start,length); //获得标签体的文字串内容 /* 下列的代码主要是识别是否是指定的名称的标签,如果是并且识别其标签体是否为空,最后获得标签体的文字串 */ if(this.ElementName.equals("姓名") && tagBodyText.equals("张三")) { this.name=tagBodyText; } if(this.ElementName.equals("出生日期")&& !tagBodyText.trim().equals("")) { this.brith=tagBodyText; } if(this.ElementName.equals("专业")&& !tagBodyText.trim().equals("")) { this.pro=tagBodyText; } if(this.ElementName.equals("年级") && !tagBodyText.trim().equals("")) { this.grade=tagBodyText; } if(this.ElementName.equals("班级") && !tagBodyText.trim().equals("")) { this.classname=tagBodyText; } } public void startDocument(){ tags = new Stack(); //count = 0; } public void endDocument(){ System.out.println("总共有"+count+"个学生"); System.out.println("姓名:"+name); System.out.println("性别:"+sex); System.out.println("出生日期:"+brith); System.out.println("专业:"+this.pro); System.out.println("年级:"+grade); System.out.println("班级:"+classname); System.out.println("方向:"+this.proat); } public void startElement(String namespaceURI, String localName, String qName, Attributes atts){ tags.push(qName); if (qName.equals("学生信息")){ count++; this.sex = atts.getValue(0);}this.ElementName=qName; this.proat = atts.getValue(0); } public void endElement(String namespaceURI,String localName,String qName) throws SAXException { tags.pop(); //从Stack中获得标签的名称字符串 } public static void main(String[] args){ String filename = "student.xml"; SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser saxparser = null; try { saxparser = spf.newSAXParser(); } catch (ParserConfigurationException ex) { ex.printStackTrace(); } catch (SAXException ex) { ex.printStackTrace(); } try { saxparser.parse(new File(filename),new XMLParser()); } catch (SAXException ex) { ex.printStackTrace(); System.exit(1); } catch (IOException ex) { ex.printStackTrace(); System.exit(1); } } } student.xml <?xml version="1.0" encoding="GB2312" standalone="yes" ?> <软件学院学生信息> <学生信息 性别="男"> <姓名>张三</姓名> <出生日期>1987/10/18</出生日期> <专业>软件工程</专业> <年级>3</年级> <班级 方向="J2EE软件开发">软件1班</班级> </学生信息> <学生信息 性别="女"> <姓名>李四</姓名> <出生日期>1988/2/18</出生日期> <专业>软件工程</专业> <年级>3</年级> <班级 方向="数字媒体方向">软件2班</班级> </学生信息> </软件学院学生信息> 解析结果不对……
|