• Java Sax解析


    一.   Java Sax解析是按照xml文件的顺序一步一步的来解析,在解析xml文件之前,我们要先了解xml文件的节点的种类,一种是ElementNode,一种是TextNode。如下面的这段book.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <bookStore>
     3     <book id="1">
     4         <name>thinking in java</name>
     5         <price>88</price>
     6         <author>Bruce Eckel</author>
     7     </book>
     8 
     9     <book id="2">
    10         <name>java编程思想</name>
    11         <price>98</price>
    12         <author>陈昊鹏  译</author>
    13     </book>
    14 </bookStore>
    <bookStore>是ElementNode,thinking in java 内容属于TextNode。

    首先Sax解析器加载xml文件,sax解析是按照读取文件的顺序进行解析,当读入文件时,会调用startDocument()方法。读入<bookStore>时候,因为它是一个Element节点,调用startElement(String uri, String localName, String qName, Attributes attributes)方法,然后读入
    <bookStore>和<book>节点之间的内容,会调用characters(char[] ch, int start, int length),这个会解析成" ",然后解析<book>节点,调用endElement(String uri,String localName,String qName)其中qName是节点的名称。然后解析book节点的内容,调用characters方法接着调用endElement()方法,一直到文档结束。
     1 import java.io.File;
     2 import javax.xml.parsers.SAXParser;
     3 import javax.xml.parsers.SAXParserFactory;
     4 import org.xml.sax.Attributes;
     5 import org.xml.sax.SAXException;
     6 import org.xml.sax.helpers.DefaultHandler;
     7 
     8 public class SaxParseTest
     9 {
    10   public static void main(String[] args) throws Exception
    11   {
    12     saxParseXml("src/book.xml");
    13   }
    14   
    15   static void saxParseXml(String fileName) throws Exception{
    16     SAXParserFactory factory = SAXParserFactory.newInstance();
    17     SAXParser saxParser = factory.newSAXParser();
    18     saxParser.parse(new File(fileName), new mySaxHanlder());
    19   }
    20   
    21 }
    22 
    23 class mySaxHanlder extends DefaultHandler{
    24   @Override
    25   public void startElement(String uri,String localName,String qName, Attributes attributes) throws SAXException
    26   {
    27     System.out.print("<"+qName+">");
    28   }
    29 
    30   @Override
    31   public void endElement(String uri,String localName,String qName) throws SAXException
    32   {
    33     System.out.print("</"+qName+">");
    34   }
    35 
    36   @Override
    37   public void characters(char[] ch, int start, int length) throws SAXException
    38   {
    39     System.out.print(new String(ch,start,length));
    40   }
    41 }

    代码只是将加载的xml文件内容输出到控制台。注意:不要将节点之间的空白忘记,它会将空白当成文本节点(TextNode)进行解析.

  • 相关阅读:
    基于集合成工控机Ubuntu系统安装分区详解
    MySql连接问题
    再记一个提供webServices的网址
    J​a​y​r​o​c​k​.​J​s​o​n​读​取​j​s​o​n​数​据​(​n​e​t​)
    jquery mobile页面跳转后,必须重新刷新页面js方可有效
    删除数据库失败 因为当前数据库正在使用
    如何解决自定义404页面在IE等浏览器中无法显示问题
    HTTP协议详解(真的很经典)
    如何在XAMPP中设置多个网站
    apache php 多站点配置 重新整理
  • 原文地址:https://www.cnblogs.com/chenxiaocai/p/5253429.html
Copyright © 2020-2023  润新知