java--通过sax方式解析xml文件的简单实例
2015-10-18 09:36
761 查看
1.重写的继承自DefaultHandler的方法,部分代码如下:
@Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub super.startElement(uri, localName, qName, attributes); //当属性名为book时开始解析 if(qName.equals("book")){ System.out.println("---开始对第"+bookindex+"书进行解析---"); int a=attributes.getLength(); //输出属性名: System.out.println("属性名为:"+qName); //遍历属性 for(int i=0;i<a;i++){ System.out.println("属性值为:"+attributes.getValue(i)); } }else{ if(!qName.equals("bookstore")){ System.out.print("节点名为:"+qName+" "); } } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub if (qName.equals("name")){ System.out.println("-------------------"+value); b.setName(value); System.out.println("添加成功"); } if(qName.equals("author")){ b.setAuthor(value); } if(qName.equals("year")){ b.setYear(value); } super.endElement(uri, localName, qName); if(qName.equals("book")){ System.out.println("---结束对第"+bookindex+"书进行解析---"); booklist.add(b); //new 一下,清空已有的对象属性 b= new book(); System.out.println("添加的书的名字:"+b.getName()); bookindex++; } } //重写开始解析和结束解析的方法 @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); System.out.println("开始解析"); } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); System.out.println("结束解析"); } /* (non-Javadoc) * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int) */ @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch, start, length); value= new String(ch, start, length); //如果去掉空格部为空 if(!value.trim().equals("")){ System.out.println("节点值为:"+value); } }解析方法如下:
public static void createXml() throws Exception{ ArrayList<book> booklist=jiexi(); //开始创建xml文件,前几步都是一样的 SAXTransformerFactory stf=(SAXTransformerFactory)SAXTransformerFactory.newInstance(); TransformerHandler hander=stf.newTransformerHandler(); //得到一个Transformer对象 Transformer tf=hander.getTransformer(); //然后进行一些xml文件的设置 //设置换行 tf.setOutputProperty(OutputKeys.INDENT, "yes"); //设置xml文件的字符编码 tf.setOutputProperty(OutputKeys.ENCODING, "utf-8"); //创建一个result对象并与hander进行关联 File file= new File("book2.xml"); if(!file.exists()){ file.createNewFile(); System.out.println("文件创建成功"); } Result result = new StreamResult(new FileOutputStream(file)); hander.setResult(result); //接下來利用hander对象对xml进行内容的编写 //先开始document AttributesImpl attr= new AttributesImpl(); hander.startDocument(); hander.startElement("", "", "bookstore", attr); //遍历booklist,并把它写入xml节点 int i=1; for(book bo:booklist){ attr.clear(); //添加一个属性到attr attr.addAttribute("", "", "id", "",i+""); //i+""或者Integer.toString(i)将int转换成字符串 hander.startElement("", "", "book", attr); //attr表示属性值 //当两本书的节点名不一样时,加一份判断,如果得到的值不为空并且去掉空格部位空时才进行添加,以下添加一样 if(bo.getName()!=null && !bo.getName().trim().equals("")){ attr.clear(); hander.startElement("", "", "name", attr); //添加name中的文本 hander.characters(bo.getName().toCharArray(), 0, bo.getName().length()); hander.endElement("", "", "name"); } //添加作者 attr.clear(); hander.startElement("", "", "author", attr); hander.characters(bo.getAuthor().toCharArray(), 0,bo.getAuthor().length()); hander.endElement("", "", "author"); //添加出版年份 attr.clear(); hander.startElement("", "", "year", attr); hander.characters(bo.getYear().toCharArray(), 0, bo.getYear().length()); hander.endElement("", "", "year"); //结束book节点 hander.endElement("", "", "book"); i++; } hander.endElement("", "", "bookstore"); hander.endDocument(); }
相关文章推荐
- Java 八大排序之——快速排序
- Java 八大排序之——堆排序
- Spring的特点
- Java 实现栈
- Spring常用注解---IoC
- Java的静态方法、静态属性、静态代码块
- java定时任务
- java中的权限
- spring aop 权限管理
- Java基础知识强化100:JVM(Java虚拟机)内存体系 与 对象访问
- Java 类反射机制分析
- eclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法
- java web用户请求过程原理的另类剖析
- hibernate中异常Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect
- java基础
- Xampp+Xdebug+netbeans安装配置(php开发工具)
- cucumber_java从入门到精通(5)使用maven创建cucumber_java项目
- Spring - MVC Framework 教程
- Amazon OA2准备——最大公约数
- Java性能调优