XML---解析

来源:互联网 发布:sci hub 知乎 编辑:程序博客网 时间:2024/05/17 20:15

本文介绍三种xml文件的解析方法,Dom解析,SAX解析,Dom4j解析。
1.Dom解析
Dom解析是javax下的一种xml解析方法
解析过程如下:

package parseXML;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.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;public class DomTest {    public static void main(String[] args) {        // TODO Auto-generated method stub            try {                readXml("src/basic/basic.xml");            } catch (Exception e) {                // TODO Auto-generated catch block                e.printStackTrace();            }    }    public static void readXml(String path) throws Exception{        //1.拿到工厂        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();        //2.拿到解析器        DocumentBuilder builder =factory.newDocumentBuilder();        //3.解析XML        Document doc=builder.parse(path);        //4.拿到根标签        Element root=doc.getDocumentElement();        //查看所有节点内容        showDetail(root);    }    public static void showDetail(Node node){        //1.查看本节点内容        String name =node.getNodeName();        if("#text".equals(name)){            name = node.getTextContent();        }        System.out.print(name);        //2.本节点属性        NamedNodeMap attrs=node.getAttributes();        if(attrs!=null){            int len = attrs.getLength();            for(int i=0;i<len;i++){                Node att =attrs.item(i);                String key =att.getNodeName();                String value =att.getNodeValue();                System.out.print("  "+key+" ="+value+"    ");            }        }        System.out.println();        //递归        //node.getChildNodes().getLength()>0        //node.hasChildNodes()        if(node.hasChildNodes()){            NodeList cns=node.getChildNodes();            int len=cns.getLength();            for(int i = 0; i < len; i++){                Node cn =cns.item(i);                showDetail(cn);            }        }    }}

2.SAX解析
SAX解析也是由javax提供的xml文件的解析方法
解析过程如下:

package parseXML;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 SAXTest {    public static void main(String[] args) {        // TODO Auto-generated method stub         try {            readXml("src/basic/basic.xml");        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    public static void readXml(String path)throws Exception{        SAXParserFactory factory =SAXParserFactory.newInstance();        SAXParser  parser =factory.newSAXParser();        parser.parse(path,                 new DefaultHandler(){                    @Override                    public void startDocument() throws SAXException {                        System.out.println("开始读取xml文档");                    }                    @Override                    public void endDocument() throws SAXException {                        System.out.println("xml读取结束");                    }                    @Override                    public void startElement(String uri, String localName, String qName, Attributes attributes)                            throws SAXException {                        System.out.print("<"+qName);                        int len =attributes.getLength();                        for(int i =0;i<len ;i++){                            String key =attributes.getQName(i);                            String value =attributes.getValue(i);                            System.out.print(key+"= "+value+"  ");                        }                        System.out.print(">");                        System.out.println();                    }                    @Override                    public void endElement(String uri, String localName, String qName) throws SAXException {                        System.out.println("</"+qName+">");                    }                    @Override                    public void characters(char[] ch, int start, int length) throws SAXException {                        System.out.println("字符内容:"+new String(ch, start, length));                    }                       }                );    }}

3.Dom4解析方法
Dom4解析方法需要添加dom4j架包。
解析过程如下:

package parseXML;import java.util.List;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class Dome4Test {    public static void main(String[] args) {        try {            readXml("src/basic/basic.xml");        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    public static void readXml(String path)throws Exception{        SAXReader reader =new SAXReader();        Document doc=reader.read(path);        Element root =doc.getRootElement();        showDetail(root);    }    private static void showDetail(Element e) {        //查看节点内容        String name =e.getName();        String text =e.getText();        System.out.print(name);        List<Attribute> attrs =e.attributes();        //展示属性        if(attrs!=null){            for(Attribute attr:attrs){                String key=attr.getName();                String value =attr.getValue();                System.out.print(" "+key+"="+value+" ");            }        }        if(text!=null){            System.out.print(text);        }        System.out.println();        //判断是否有子节点        if(e.hasContent()){            List<Element> elements=e.elements();            for(Element ele:elements){                showDetail(ele);            }        }    }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑上的文件打不开怎么办 word文件打开是乱码怎么办 wps文件打开是乱码怎么办 电脑读tst文件乱码怎么办 智能手机中了勒索病毒怎么办 部队训练脚崴了怎么办 滴滴车型信息识别失败怎么办 先打人被打了怎么办 我被警察打了怎么办 2k13选秀卡住了怎么办 正当防卫二进去之后没有字怎么办 国土防线2子弹打完了怎么办 诛仙宠物满了怎么办 试用联盟认证手机号是空号怎么办 系统出新版本不显示更新怎么办 炉石账号封停怎么办 电脑用户名和密码忘了怎么办 黑猴子棒球1闪退怎么办 斗米兼职报名后怎么办 婴儿足跟血检查有异常怎么办 打印机显示脱机使用打印机怎么办 手机刷机后内存变小了怎么办 吃了解毒丹喝酒怎么办 6s更新ios11失败怎么办 苹果6s手机发热怎么办 苹果手机没有描述文件怎么办 电脑玩穿越火线卡怎么办 老电脑又卡又慢怎么办 梦幻之星4花屏怎么办 失业连续好多天睡不着觉怎么办 工业废气排放总量超标怎么办 lol美服更新不了怎么办 支付宝没法实名额度上限怎么办 苹果手机软件被禁止联网了怎么办 幽灵行动荒野黑屏怎么办打开游戏 幽灵行动荒野一点战役就秒退怎么办 华为账号密码忘了怎么办 ios荒野行动掉帧怎么办 一个人心理产生极度恐慌失眠怎么办 肺被子弹打穿了怎么办 文明5完整版锁区怎么办