XML解析工具化!一键摆脱繁琐的固定套路。

工具化原因: 大家都知道在使用XML解析时有一些固定的语句,要得到XML文件里的内容必须要输入这些固定的套路,用起来不是很舒服,今天做了一个XML解析的工具,可以用三四行代码实现解析XML,以便于日后使用起来非常方便。解析XML文件的固定套路:

		try {
			DocumentBuilderFactory dbf = 
					DocumentBuilderFactory.newInstance();
			DocumentBuilder db = dbf.newDocumentBuilder();
			
			InputStream is = 
					Class.class.getResourceAsStream("/NewFile.xml");
			System.out.println(is);
			Document document = db.parse(is);
			NodeList studentlist = 
					document.getElementsByTagName("student");
			
			for(int i = 0; i < studentlist.getLength(); i++){
				Element student = (Element) studentlist.item(i);
				//TODO 处理得到的Element
			}	
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

XML 解析工具化: 代码如下

package com.until.XML;

import java.io.IOException;
import java.io.InputStream;

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.NodeList;
import org.xml.sax.SAXException;

public abstract class XMLparser {
	private static DocumentBuilder db;
	//这里使用static的原因是如
	//DocumentBuilderFactory.newInstance().newDocumentBuilder();的语句
	//只需要在类加载的时候运行一遍即可,所以用static但该语句有异常处理所以下面采用
	//static静态块初始化。
	
	static {
		try {
			db =  DocumentBuilderFactory.newInstance().newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}
	}
	
	public XMLparser() {
	}
	
	public abstract void dealAction(Element element, int index); 
	//这里定义一个接口,让用户处理得到的element,当有多个element时会有对于的下边index来区分。
	
	
	//首先先做一个得到document的方法返回值类型为Document。采用static原因是用户可以通过类
	//直接使用,方便操作。
	public static Document getDocumentFile(String file) {
		Document document = null;	
		try {
			InputStream is = Class.class.getResourceAsStream(file);
			document = db.parse(is);
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return document;
	}

	//给用户三种可以选择的方法,便于用户操作
	//第一种用户提供Document类型对象和标签名字。
	public void dealDocument(Document document, String Tagname){
		NodeList nodelist = document.getElementsByTagName(Tagname);
		for(int index = 0; index < nodelist.getLength(); index++) {
			Element element = (Element)nodelist.item(index);
			dealAction(element, index);
		}	
	}
	
	//第二种用户提供Element类型对象和标签名字。
	public void dealDocument(Element element, String Tagname){
		NodeList nodelist = element.getElementsByTagName(Tagname);
		for(int index = 0; index < nodelist.getLength(); index++) {
			Element ele = (Element)nodelist.item(index);
			dealAction(ele, index);
		}	
	}
	
	//第三种用户提供文件路径(字符串)和标签名字。
	public void dealDocument(String file, String Tagname){
		Document document = getDocumentFile(file);
		NodeList nodelist = document.getElementsByTagName(Tagname);
		for(int index = 0; index < nodelist.getLength(); index++) {
			Element element = (Element)nodelist.item(index);
			dealAction(element, index);
		}
	}
	
}

使用所写工具解析XML文件:

package com.until.test;

import org.w3c.dom.Element;

import com.until.XML.XMLparser;

public class test {

	public static void main(String[] args) {

		//实例化一个对象直接采用该实例的方法。
		//第一种使用方法:
		new XMLparser() {
			
			@Override
			public void dealAction(Element element, int index) {
				System.out.println(element.getTextContent());
				
				//第二种使用方法,在第一种基础上
				new XMLparser(){

					@Override
					public void dealAction(Element element, int index) {
						System.out.println(element.getTextContent());
					}	
					
				}.dealDocument(element, "id");
			}
			
		}.dealDocument("/NewFile.xml", "student");//直接使用该实例的方法
		
		//第三种使用方法:
		new XMLparser() {

			@Override
			public void dealAction(Element element, int index) {
				System.out.println(element.getTextContent());
			}
			
		}.dealDocument(XMLparser.getDocumentFile("/NewFile.xml"), "student");
		//直接使用该实例的方法XMLparser.getDocumentFile("/NewFile.xml")返回值为Document
		//getDocumentFile是static的所以可以使用类点出来。
	}

}

所用的XML文件:

<?xml version="1.0" encoding="UTF-8"?>

<students>
	<student>
		<id>06172099</id>
		<name>杨涛</name>
		<sex>男</sex>
		<birthday>19970911</birthday>
		<hobbies>
			<hobby>编程</hobby>
			<hobby>打游戏</hobby>
			<hobby>睡觉</hobby>
		</hobbies>
		<intoduce>和女朋友逛街很好玩</intoduce>
	</student>
</students>

解析结果

以上就是说做的解析XML的工具,欢迎大家使用。

转载请说明出处!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xml加密(XML Encryption)是w3c加密xml的标准。这个加密过程包括加密xml文档的元素及其子元素,通过加密,xml的初始内容将被替换,但其xml格式仍然被完好的保留。 介绍 我们有3个加密xml的方法 1、仅仅使用对称加密的方法加密xml 这种加密方法只使用一个密钥,也就是说无论是加密xml还是解密xml都使用一个相同的密钥。因为这个密钥不会在被加密的xml中保存,所以我们需要在加密和解密的过程中加载这个密钥并保护它不被窃取。 2、使用对称加密和非对称加密相结合的方法来加密xml 这种方法需要一个用于加密数据的对称密钥和一个用于保护这个对称密钥的非对称密钥。被加密的对称密钥和被加密的数据一起保存在xml文档中。当用私有非对称密钥解密密钥的时候要用公开非对称密钥对密钥进行加密。 本文就将使用这种方法。想学到其他更多的方法请参看MSDN等到更多的信息。 (译者注:非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。) 3、使用X.509加密xml,这种方法是用X.509作为非对称密钥,它由诸如VeriSign之类的第三方提供。 方法 不管xml加密是如何完成的,保存加密数据总是用两种方法之一。 1、加密后所有的元素都被命名为 2、加密后只有数据被替换,而元素名称仍然是可读的,不会发生变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值