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

一、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(){
				//暂时定义一个名字为null
				String name=null;
				@Override
				public void characters(char[] ch, int start, int length)
						throws SAXException {
					if("sage".equals(name)){
						System.out.println(new String(ch, start, length));
					}
				}

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

				@Override
				public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值