【Java】简易的XML文件解析工具和Properties文件解析工具

 

XML文件解析:

package com.chy.parser.core;

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 documberBulider;
	
	//使用单例模式,DocumentBuilder类的对象只需实例化一次;
	static {
		try {
			documberBulider = DocumentBuilderFactory.newInstance().newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}
	}
	
	public XMLParser() {
	}
	
	//将该工具作为抽象类,让工具使用者自行完成dealElement方法以及对属性和内容的读取;
	public abstract void dealElement(Element element, int index);
	
	//分别处理Document和Element这两种参数类型;
	public void dealElementInTag(Document document, String tagname) {
		NodeList elementList = document.getElementsByTagName(tagname);
		for (int index = 0; index < elementList.getLength(); index++) {
			Element element = (Element) elementList.item(index);
			
			dealElement(element, index);
		}
	}
	
	public void dealElementInTag(Element element, String tagname) {
		NodeList elementList = element.getElementsByTagName(tagname);
		for (int index = 0; index < elementList.getLength(); index++) {
			Element elements = (Element) elementList.item(index);
			
			dealElement(elements, index);
		}
	}
	
	//用户决定XML文件路径参数;
	public static Document getDocument(String XMLpath) {
		Document document = null;
		try {
			InputStream input = Class.class.getResourceAsStream(XMLpath);
			document = documberBulider.parse(input);
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return document;
	}
}

 

properties文件解析:

package com.chy.parser.core;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class PropertiesParser {
	private static final Map<String, String> keyValueMap;
	
	static {
		keyValueMap = new LinkedHashMap<>();
	}
	
	//在这里对三种可能的参数类型均做处理;
	public static void loadProperties(String propertiesPath) {
		InputStream input = PropertiesParser.class.getResourceAsStream(propertiesPath);
		loadding(input);
	}
	
	public static void loadProperties(InputStream input) {
		loadding(input);
	}
	
	public static void loadProperties(File file) {
		try {
			InputStream input = new FileInputStream(file);
			loadding(input);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

	public static void loadding(InputStream input) {
		Properties properties = new Properties();
		try {
			properties.load(input);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		//使用枚举遍历,并存入Map;
		Enumeration<Object> keys = properties.keys();
		while (keys.hasMoreElements()) {
			String key = (String) keys.nextElement();
			String value = properties.getProperty(key);
			keyValueMap.put(key, value);
		}
	}
	
	public static Set<String> keySet() {
		return keyValueMap.keySet();
	}
	
	public static String value(String key) {
		return keyValueMap.get(key);
	}
}

 

package com.hexiang.utils; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的节点 * @param attributeName 要取值的属性名称 * @return 要获取的属性的值 * @author HX_2010-01-12 */ public static String getAttribute( Element element, String attributeName ) { return element.getAttribute( attributeName ); } /** * 获取指定节点下的文本 * @param element 要获取文本的节点 * @return 指定节点下的文本 * @author HX_2010-01-12 */ public static String getText( Element element ) { return element.getFirstChild().getNodeValue(); } /** * 解析某个xml文件,并在内存中创建DOM树 * @param xmlFile 要解析XML文件 * @return 解析某个配置文件后的Document * @throws Exception xml文件不存在 */ public static Document parse( String xmlFile ) throws Exception { // 绑定XML文件,建造DOM树 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document domTree = db.parse( xmlFile ); return domTree; } /** * 获得某节点下的某个子节点(指定子节点名称,和某个属性的值) * 即获取parentElement下名字叫childName,并且属性attributeName的值为attributeValue的子结点 * @param parentElement 要获取子节点的那个父节点 * @param childName 要获取的子节点名称 * @param attributeName 要指定的属性名称 * @param attributeValue 要指定的属性的值 * @return 符合条件的子节点 * @throws Exception 子结点不存在或有多个符合条件的子节点 * @author HX_2008-12-01 */ public static Element getChildElement( Element parentElement, String childName, String attributeName, String attributeValue ) throws Exception { NodeList list = parentElement.getElementsByTagName( childName ); int count = 0; Element curElement = null; for ( int i = 0 ; i < list.getLength() ; i ++ ) { Element child = ( Element )list.item( i ); String value = child.getAttribute( attributeName ); if ( true == value.equals( attributeValue ) ) { curElement =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值