使用DOM、DOM4j、SAX三种方式解析XML

来源:互联网 发布:淘宝回收旧丝袜 编辑:程序博客网 时间:2024/06/07 22:50

一、DOM解析

DOM:Document Object Model 文档对象模型

//实例化document工厂DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();//实例化document构造器DocumentBuilder db=dbf.newDocumentBuilder();//通过构造器读取数据(解析数据)Document document=db.parse(new File("students.xml"));//拿到<students>根节点Element element=document.getDocumentElement();//拿到<student>下的所有节点NodeList nodeList=element.getElementsByTagName("student");for (int i = 0; i <nodeList.getLength(); i++) {//遍历所有的子节点,得到某子节点Element student=(Element) nodeList.item(i);//得到属性的值打印System.out.println(student.getAttribute("sid")+" "+student.getAttribute("sname"));NodeList nodeList2=student.getChildNodes();for (int j = 0; j <nodeList2.getLength(); j++) {Node node=nodeList2.item(j);//判断是否是标签if(node.getNodeType()==node.ELEMENT_NODE){Element element2=(Element) nodeList2.item(j);if("sage".equals(element2.getNodeName())){//得到标签的内容打印System.out.println(element2.getTextContent());}else if("ssex".equals(element2.getNodeName())){System.out.println(element2.getTextContent());}}}}


二、Dom4j解析

//实例化SAX读取器SAXReader saxReader=new SAXReader();//读取Document document=saxReader.read(new File("students.xml"));//拿到根节点Element element=document.getRootElement();//拿到student所有的节点List<Element> list=element.elements("student");//通过集合去遍历得到的标签和属性值for (Element element2 : list) {System.out.println(element2.attributeValue("sid")+element2.attributeValue("sname")+element2.element("sage").getTextTrim());}


三、SAX解析

a) 具体的英文名是:Simplement API for XML

//实例化SAX解析器工厂SAXParserFactory saf=SAXParserFactory.newInstance();//实例化SAX构造器SAXParser sap=saf.newSAXParser();//开始解析sap.parse(new File("students.xml"), new DefaultHandler(){//暂时定义一个名字为nullString name=null;@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {if("sage".equals(name)){System.out.println(new String(ch, start, length));}}@Overridepublic void endElement(String uri, String localName,String qName) throws SAXException {name=null;}@Overridepublic void startElement(String uri, String localName,String qName, Attributes attributes)throws SAXException {//拿到跟标签下的子标签name=qName;if("student".equals(qName)){System.out.println(attributes.getValue(0)+" "+attributes.getValue(1));}}});


四、DOMSAX解析的区别

a) DOM解析占用内存比较大,但是方便对XML进行CRUD

b) SAX有点占用内存小,解析速度快,缺点只适合做文档读取,不适合做CRUD.





阅读全文
0 0
原创粉丝点击