XML解析(DOM,SAX,dom4j)

前端之家收集整理的这篇文章主要介绍了XML解析(DOM,SAX,dom4j)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
package com.ztt;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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

import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.io.DOMReader;
import org.dom4j.io.SAXReader;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class HttpConnectionXML
{
	static StringBuffer result = new StringBuffer();
	public static void main(String[] args)
	{
		httpConnection();
	}
	
	public static void httpConnection()
	{
		URL url = null;
		BufferedReader reader = null;
		try
		{
			// 这里使用了博客园的接口
			String urlStr = "http://wcf.open.cnblogs.com/news/recent/5";
			url = new URL(urlStr);
			URLConnection connection = url.openConnection();
		    // 设置通用的请求属性		设置头信息的,比如格式,UA等,不设置有默认
            connection.setRequestProperty("accept","*/*");
            connection.setRequestProperty("connection","Keep-Alive");
            connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立链接
            connection.connect();
            Map<String,List<String>> map = connection.getHeaderFields();
            for (String key : map.keySet())
			{
//				System.out.println(key + ">>>>>>>>>>>" + map.get(key));
			}
            InputStream inputStream = connection.getInputStream();
            // DOM解析
//            dom(inputStream);
            // SAX解析
//            sax(inputStream);
            // dom4j SAX解析
            dom4jSAX(inputStream);
            // dom4j DOM解析
            dom4jDOM(inputStream);
//            reader = new BufferedReader(new InputStreamReader(inputStream));
//			String line = "";
//			while((line = reader.readLine()) != null)
//			{
//				result.append(line);
//			}
//			System.out.println(result);
            
		} catch (MalformedURLException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}finally
		{
			try
			{
				if (reader!=null)
				reader.close();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		
	}

	public static void dom(InputStream in)
	{
		// 1、建立文档处理工厂
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
		try
		{
			// 2、文档解析器
			DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
			// 3、得到文档
			Document document = documentBuilder.parse(in);
			// 4、找到其中的“entry”节点
			NodeList nodeList = document.getElementsByTagName("entry");
			// 5、循环节点,取出数据
			for (int i = 0; i < nodeList.getLength(); i++)
			{
				Element note = (Element) nodeList.item(i);
				System.out.println("TITLE-----" + note.getElementsByTagName("title").item(0).getFirstChild().getNodeValue());
				System.out.println("LINK------" + note.getElementsByTagName("link").item(0).getAttributes().getNamedItem("href"));
			}
		} catch (ParserConfigurationException e)
		{
			e.printStackTrace();
		} catch (SAXException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}
	
	public static void sax(InputStream in)
	{
		// 1、SAX处理工厂
		SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
		try
		{
			// SAX解析器
			SAXParser saxParser = saxParserFactory.newSAXParser();
			// 自定义的处理器
			MyHandler myHandler = new MyHandler();
			
			saxParser.parse(in,myHandler);
		} catch (ParserConfigurationException e)
		{
			e.printStackTrace();
		} catch (SAXException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}
	
	public static void dom4jSAX(InputStream in)
	{
		SAXReader saxReader = new SAXReader();
		try
		{
			org.dom4j.Document document = saxReader.read(in);
			// 得到根节点 一级节点
			org.dom4j.Element rootNode = document.getRootElement();
			// 取得根节点底下的二级节点集合
			List<org.dom4j.Element> rootList = rootNode.elements();
			for (int i = 0; i < rootList.size(); i++)
			{
				if ("entry".equals(rootList.get(i).getName()))
				{
					// 得到 entry 节点下面的三级节点集合
					List<org.dom4j.Element> entryList = rootList.get(i).elements();
					for (int j = 0; j < entryList.size(); j++)
					{
						switch (entryList.get(j).getName())
						{
						case "title":// 得到值
							System.out.println(entryList.get(j).getText());
							break;
						case "link": // 得到属性
							org.dom4j.Element linkElement = entryList.get(j);
							System.out.println(linkElement.attribute(1).getValue());
							break;
						}
					}
				}
			}
		} catch (DocumentException e)
		{
			e.printStackTrace();
		}
	}
	
	public static void dom4jDOM(InputStream in)
	{
		DOMReader domReader = new DOMReader();
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder documentBuilder;
		try
		{
			documentBuilder = documentBuilderFactory.newDocumentBuilder();
			org.w3c.dom.Document domDocument = documentBuilder.parse(in);
			// 参数为org.w3c.dom.Document实例
			org.dom4j.Document document = domReader.read(domDocument);
			org.dom4j.Element rootElement = document.getRootElement();
			// 取得二级节点的迭代器
			Iterator<org.dom4j.Element> iterator = rootElement.elementIterator("entry");
			while (iterator.hasNext())
			{
				org.dom4j.Element element = iterator.next();
				// 取的值
				System.out.println(element.elementTextTrim("title"));
				// 取得属性 
				System.out.println(element.element("link").attributeValue("href"));
			}
		} catch (ParserConfigurationException e)
		{
			e.printStackTrace();
		} catch (SAXException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}
}
 
 
<pre name="code" class="java">package com.ztt;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MyHandler extends DefaultHandler
{
	private String tagName;
	
	private String titleStr;
	private String link_href;
	@Override
	public void startDocument() throws SAXException
	{
		super.startDocument();
		System.out.println("------------------------------------------");
	}

	@Override
	public void endDocument() throws SAXException
	{
		super.endDocument();
		System.out.println("------------------------------------------");
	}

	@Override
	public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException
	{
		super.startElement(uri,localName,qName,attributes);
		tagName = qName;
		switch (tagName)
		{
		case "link":
			System.out.println(attributes.getLocalName(1));
			link_href = attributes.getValue(1);
			System.out.println(link_href);
			break;
		}
	}

	@Override
	public void endElement(String uri,String qName)
			throws SAXException
	{
		super.endElement(uri,qName);
		switch (tagName)
		{
		case "title":
			System.out.println(titleStr);
			break;
		}
	}

	@Override
	public void characters(char[] ch,int start,int length)
			throws SAXException
	{
		super.characters(ch,start,length);
		switch (tagName)
		{
		case "title":
			titleStr = new String(ch,length);
			break;
		}
	}
}
原文链接:https://www.f2er.com/xml/297490.html

猜你在找的XML相关文章