XML解析

来源:互联网 发布:淘宝返现规则 编辑:程序博客网 时间:2024/06/08 09:56


现在来说一说XML解析

下面为xml解析图解



上图基本为xml三种解析的实现思路代码如下,

Dom解析

package com.zking.test;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
 * 使用DOM解析XML
 * @author Administrator
 *
 */
public class TestParseXMLByDOM {
    
    public static void main(String[] args) {
        try {
            //1.实实例化DocumentBuilderFactory
            DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
            //2.通过dbf获取DocumentBuilder
            DocumentBuilder db=dbf.newDocumentBuilder();
            //3.解析
            Document document=db.parse(new File("students.xml"));
            //4.获取跟节点<students>
            Element students=document.getDocumentElement();
            //5.获取所有的<student>节点
            NodeList nodeList=students.getElementsByTagName("student");
            for (int i = 0; i < nodeList.getLength(); i++) {
                //node element
                Element student=(Element) nodeList.item(i);
                //获取属性
                String sid=student.getAttribute("sid");
                String sname=student.getAttribute("sname");
                
                //获取<student>下面的<sage><ssex>
                Element elementSage=(Element) student.getElementsByTagName("sage").item(0);
                Element elementSsex=(Element) student.getElementsByTagName("ssex").item(0);
                
                String sage=elementSage.getTextContent();
                String ssex=elementSsex.getTextContent();
                
                System.out.println(sid+" "+sname+" "+sage+" "+ssex);
                //获取<student>下面的<sage><ssex>
                /*NodeList nodeListChild=student.getChildNodes();
                for (int j = 0; j < nodeListChild.getLength(); j++) {
                    Node node=nodeListChild.item(j);
                    if(node.getNodeType()==Node.ELEMENT_NODE){
                        Element element=(Element) nodeListChild.item(j);
                        //获取标签的名字
                        String elementName=element.getNodeName();
                        if("sage".equals(elementName)){
                            //获取<sage>的值
                            String sage=element.getTextContent();
                            System.out.println("  "+sage);
                        }else if("ssex".equals(elementName)){
                            String ssex=element.getTextContent();
                            System.out.println("  "+ssex);
                        }
                    }
                }*/
            }
            
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

2.dom4j解析

package com.zking.test;

import java.io.File;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 使用dom4j解析XML
 * @author Administrator
 *
 */
public class TestParseXMLByDom4j {
    public static void main(String[] args) {
        try {
            SAXReader saxReader=new SAXReader();
            Document document=saxReader.read(new File("students.xml"));
            Element root=document.getRootElement();
            List<Element> student=root.elements("student");
            for (Element element : student) {
                String sid=element.attributeValue("sid");
                String sname=element.attributeValue("sname");
                
                //子标签
                Element elementSage=element.element("sage");
                Element elementSsex=element.element("ssex");
                
                String sage=elementSage.getTextTrim();
                String ssex=elementSsex.getTextTrim();
                
                System.out.println(sid+" "+sname+" "+sage+" "+ssex);
            }
            
            
            
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}


3.sax解析


package com.zking.test;

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;

/**
 * 使用SAX解析XML
 * @author Administrator
 *
 */
public class TestParseXMLBySAX {
    public static void main(String[] args) {
        try {
            //1.实例化SAXParserFactory
            SAXParserFactory spf=SAXParserFactory.newInstance();
            //2.通过spf获取SAXParser
            SAXParser saxParser=spf.newSAXParser();
            //3.开始解析
            saxParser.parse(new File("students.xml"), new DefaultHandler(){
                String currentTagName=null;
                
                @Override
                public void characters(char[] ch, int start, int length)
                        throws SAXException {
                    super.characters(ch, start, length);
                    if("sage".equals(currentTagName)){
                        String sage=new String(ch, start, length);
                        System.out.println(sage);
                    }else if("ssex".equals(currentTagName)){
                        String ssex=new String(ch, start, length);
                        System.out.println(ssex);
                    }
                }

                @Override
                public void endElement(String uri, String localName,
                        String qName) throws SAXException {
                    super.endElement(uri, localName, qName);
                    currentTagName=null;
                }

                @Override
                public void startElement(String uri, String localName,
                        String qName, Attributes attributes)
                        throws SAXException {
                    super.startElement(uri, localName, qName, attributes);
                    
                    currentTagName=qName;
                    if("student".equals(qName)){
                        String sid=attributes.getValue(0);
                        String sname=attributes.getValue(1);
                        System.out.println(sid+" "+sname);
                    }
                    
                }
                
            });
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
}

这三种方式都能够做到,我有教学视频,想要的可以私信我,也可以一起交流,本人初学者


原创粉丝点击