Sax 구문 분석 XML에 대한 샘플 코드 공유에 대한 자세한 설명
Apr 01, 2017 pm 02:01 PM对XML进行Sax解析:
一、对XML进行Sax解析:
Sax解析XML是事件驱动的,安装XML的顺序一步一步进行解析的.优点不用事先调入整个文档,占用资源少,缺点是事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素.
二、实现:
1.创建一个XMl文档:
<?xml version="1.0" encoding="UTF-8"?> <oracle > <user id="1" > <name>scott</name> <pwd>scott</pwd> </user> <user id="2"> <name>sys</name> <pwd>sys</pwd> </user> <user id="3"> <name>system</name> <pwd>system</pwd> </user> </oracle>
2.开始解析:
package Sax解析Xml; import java.io.File; import java.io.IOException; 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; public class SaxParser { public static void main(String[] args) { // 1.实例化SaxParserFactory对象 SAXParserFactory factory = SAXParserFactory.newInstance(); try { // 2.创建解析器: SAXParser saxParser = factory.newSAXParser(); // 3.获取需要解析的文档,生成解析器,解析文档 File xmlFile = new File("myXml\\cb.xml"); MyHandler handler = new MyHandler(); // 开始解析: saxParser.parse(xmlFile, handler); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static class MyHandler extends DefaultHandler { // 作用是来记录解析的上一个节点的名称 private String preTag = null; private boolean ifEnd =false; private String getName; private String getPwd; @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub // super.characters(ch, start, length); if (preTag != null) { if ("name".equals(preTag)) { getName = new String(ch, start, length); } else if ("pwd".equals(preTag)) { getPwd = new String(ch, start, length); ifEnd=true; System.out.println(" <name>"+getName+"</name>"); System.out.println(" <pwd>"+getPwd+"</pwd>"); } } } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub // super.endDocument(); System.out.println(" </oracle>"); System.out.println("--------------------------"); System.out.println("解析XML完毕"); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub if(ifEnd==true){ System.out.println(" </user>"); ifEnd=false; } //当一个标签解析完后,preTag设置为null; preTag = null; } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub System.out.println("开始解析XML文件"); System.out.println("------------------------------"); System.out.println("<?xml version="+"\""+1.0+"\""+ "encoding="+"\""+"UTF-8"+"\""+"?"+">"); System.out.println(" <oracle>"); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub // <user id="1" > if ("user".equals(qName)) { String s = qName; String s1 = attributes.getValue(0);// Id String s2 = attributes.getLocalName(0); //System.out.println(s + s1 + s2); System.out.println(" <"+qName+" "+"id="+"\""+s1+"\""+">"); } preTag = qName; } } }
三、运行结果:
四、补充说明:
1.执行顺序:
由于Sax解析是按照xml文件的顺序来解析,当读入时,会调用startDocument()方法,当读入
2.内部类加static关键字:
内部类是动态的,也就是开头以public class开头。而主程序是public static class main。在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。所以在不做其他变动的情况下,最简单的解决办法是将public class改为public static class.
3.startElement(String uri, String localName, String qName,Attributes attributes) 方法的参数解释:
五、总结:
今天总算把对XML的两种解析方法搞了一遍,当初老师让写,自己不写,大概写了个Sax,现在都看不懂,我也是醉了,通过两种方法,我觉得Sax解析比较轻便。
위 내용은 Sax 구문 분석 XML에 대한 샘플 코드 공유에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP와 XML을 사용하여 지리적 위치 및 지도 데이터 처리 및 표시
