Jaxp中sax解析xml

xiaoxiao2021-02-28  24

sax解析的原理: sax方式:事件驱动,边读边解析 执行parse方法(parse(String uri, DefaultHandler dh);),传递两个参数: 一个是xml的路径,一个是事件处理器,当事件处理器传递出来相当于在方法里面绑定一个事件。 DefaultHandler dh:中要用到的方法 1、当解析到开始标签时候,自动执行startElement()方法 startElement(String uri, String localName, String qName, Attributes attributes)  qName:把标签的名称返回 2、当解析到文本,会自动执行characters()方法 characters(char[] ch, int start, int length)  (char[] ch, int start, int length):使用的是String的构造方法,返回标签文本内容 3、当解析到结束标签的时候,会自动执行endElement()方法 endElement(String uri, String localName, String qName) qName:把标签的名称返回 jaxp使用sax方法解析xml:

sex不能实现增删改操作,只能做查询操作

xml示例:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><person> <student> <name>张三</name> <age>19</age> </student> <student> <name>李四</name> <age>20</age> </student> </person>

sax解析代码:

package analysis; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; /** * jaxp中sax方式解析xml * @author My World * */ public class Sax_Person { public static void main(String[] args) { /** * 1、创建解析器工厂 * 2、用解析器工厂创建解析器 * 3、调用parse()方法 * * 4、自定义一个类继承DefaultHeadler * 5、重写DefaultHeadler中的那三个方法 */ try { SAXParserFactory parserFactory = SAXParserFactory.newInstance(); SAXParser parser = parserFactory.newSAXParser(); parser.parse("src/analysis/Person.xml", new MyDefaultHeadler()); } catch (Exception e) { e.printStackTrace(); } } }

重写的DefaultHeadler:

package analysis; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class MyDefaultHeadler extends DefaultHandler{ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //System.out.println("start:"+qName); System.out.print("<"+qName+">"); } @Override public void characters(char[] ch, int start, int length) throws SAXException { //System.out.println("text:"+new String(ch, start, length)); System.out.print(new String(ch, start, length)); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { //System.out.println("end:"+qName); System.out.print("</"+qName+">"); } }
转载请注明原文地址: https://www.6miu.com/read-2624918.html

最新回复(0)