javaXML解析的俩种方法-----DOM-----SAX

第一种解析方法

----------------------------------------------------------------DOM解析方式----------------------------------------------------

public class DOMxml {
	List<Tv> list = new ArrayList<Tv>();

	public static void main(String[] args) throws Exception {
		// 创建一个DocumentBuilderFactory的对象
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		// 创建一个DocumentBuilder对象
		try {
			// 创建一个DocumentBuilder对象
			DocumentBuilder db = dbf.newDocumentBuilder();
			// 创建DocumentBuilder对象的parse方法加载xml文件
			Document document = db.parse("凤凰卫视.xml");
			// 获取所有Program节点的集合
			NodeList Programlist = document.getElementsByTagName("Program");
			// System.out.println(Programlist.getLength());
			// 遍历
			Tv tv = new Tv();
			for (int i = 0; i < Programlist.getLength(); i++) {
				Node node = Programlist.item(i);
				NodeList nodes = node.getChildNodes();
				for (int j = 0; j < nodes.getLength(); j++) {
					// 区分textnode以及element类型的node
					if (nodes.item(j).getNodeType() == Node.ELEMENT_NODE) {
						// Element child=(Element)nodes.item(j);
						// System.out.println(child.getTextContent());
						// 获取element的节点名
						Node node2 = nodes.item(j);
						// 获取节点名
						String nodeName = node2.getNodeName();
						System.out.print(nodeName + ":");
						// 获取节点值
						// String
						// nodeValue=node2.getFirstChild().getNodeValue();
						String nodeValue = node2.getTextContent();
						// tv.setPlayTime(nodeValue.substring(1));
						System.out.println(nodeValue);
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		/*DOMxml doMxml=new DOMxml();
		doMxml.load();*/
	}
	/*public  void load() throws DocumentException{
		Tv tv = new Tv();
		InputStream is = this.getClass().getResourceAsStream("/"+"凤凰卫视.xml");
		Document doc = new SAXReader().read(is);
		Element rootElement = doc.getRootElement();
		
		Element mentElement=(Element)rootElement.elementIterator("ProgramList").next();
		for (Iterator<Element> ment=mentElement.elementIterator("Program"); ment.hasNext();) {
			
				 Element next = ment.next();
				 System.out.println(next);
				 String playtime=next.attributeValue("playTime");
				 String name=next.attributeValue("name");
				 String path=next.attributeValue("path");
				 System.out.println(name);
				 System.out.println(path);
				 System.out.println(playtime);
				 tv.setPlayTime(playtime);
				 tv.setName(name);
				 tv.setPath(path);
				
			
			
			
		}*/
	}

-------------------------------------------------------第二种SAX解析------------------------------------------------------------------

SAXParserHandler类

public class SAXParserHandler extends DefaultHandler {
	int count =0;
	String value=null;
	Tv tv=null;
	private ArrayList<Tv>list=new ArrayList<Tv>();
	/**
	 * 用来解析xml元素
	 */
	@Override
	
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		// 调用DefaultHandler的startElement方法
		super.startElement(uri, localName, qName, attributes);
		if (qName.equals("Program")) {
			// 获取属性值
			count++;
			System.out.println("-------------开始遍历"+count+"的内容--------------");
			int length = attributes.getLength();
			// 获取对应节点的属性值
			String value = attributes.getValue("");

		}else if(!qName.equals("Program")&&!qName.equals("ProgramList")&&!qName.equals("typeB")){
			System.out.print("节点名为:"+qName);
		}
	}

	/**
	 * 用来标识解析开始
	 */
	@Override
	public void startDocument() throws SAXException {

		super.startDocument();
		System.out.println("--------------SAX解析开始---------------");
	}

	/**
	 * 解析结束
	 */
	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.endDocument();
		
		System.out.println("----------SAX解析结束---------------");
	}

	/**
	 * 调用DefaultHandler的endElement方法
	 */
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		// TODO Auto-generated method stub
		super.endElement(uri, localName, qName);
		if (qName.equals("Program")) {
			
			//list.add(tv);
			System.out.println("-------结束遍历"+count+"的内容---------");
			
		}/*else if (qName.equals("playTime")) {
			 tv.setPlayTime(value);
		}else if (qName.equals("name")) {
			 tv.setName(value);
		}else if (qName.equals("path")) {
			 tv.setPath(value);
		}*/
	}
	

	/**
	 * 获取节点值
	 */
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		// TODO Auto-generated method stub
		super.characters(ch, start, length);
		value = new String(ch, start, length);
		if (!value.trim().equals("")) {
			System.out.println("\t节点值为:"+value);
		}
		
	}
	public ArrayList<Tv> getList() {
		return list;
	}
}
-------------------main方法--------------------------------

public static void main(String[] args) {
		// 获取一个SAXParserFactory实例
		SAXParserFactory spf = SAXParserFactory.newInstance();
		//通过factory获取SAXParser实例
		try {
			SAXParser sp=spf.newSAXParser();
			//创建SAXParserHandler对象
			SAXParserHandler sph=new SAXParserHandler();
			sp.parse("凤凰卫视.xml",sph);
			
			//System.out.println("共有"+sph.getList().size());
		} catch (Exception e) {
			e.printStackTrace();
		}
		

	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值