Java解析XML文件,获取每个节点的值

①解析XML文件的工具类

import java.io.*;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ResolveXML {

	/**
	 * 
	 * @param path XML配置路径
	 * @param type 证件类型
	 * @param headNode XML节点名称
	 * @param street 所属镇街
	 */
	public static List<String> getXMLValue(String path, String type,String headNode,String street) {
		File file = new File(path);
		DocumentBuilder db = null;
		List<String> resultList = new ArrayList<String>();
		DocumentBuilderFactory dbf = null;
		Element element = null;
		int index = 0;
		List<String> xmlNode = getXMLNode(path, type, headNode,street);
		try {
			dbf = DocumentBuilderFactory.newInstance();// 返回documentBuilderFactory对象
			db = dbf.newDocumentBuilder();// 返回db对象用documentBuilderFatory对象获得返回documentBuildr对象
			Document dt = db.parse(file);// 得到一个DOM并返回给document对象
			element = dt.getDocumentElement();// 得到一个elment根元素
			//System.out.println("根元素:" + element.getNodeName());// 获得根节点
			NodeList childNodes = element.getChildNodes();// 获得根元素下的子节点
			// 遍历这些子节点
			for (int i = 0; i < childNodes.getLength(); i++) {
				// 获得每个对应位置i的结点
				Node node1 = childNodes.item(i);
				if (headNode.equals(node1.getNodeName())) {
					// 如果节点的名称为"Account",则输出Account元素属性type
					// System.out.println(node1.getAttributes().getNamedItem("type").getNodeValue());
					String typeNodeVal = node1.getAttributes().getNamedItem("type").getNodeValue();
					if (type.equals(typeNodeVal)) {
						NodeList nodeDetail = node1.getChildNodes();// 获得<Account>下的节点
						// 遍历<Account>下的节点
						for (int j = 0; j < nodeDetail.getLength(); j++) {
							// 获得<Account>元素每一个节点
							Node detail = nodeDetail.item(j);
							if (xmlNode.get(index).equals(detail.getNodeName())) { // 输出money
								//System.out.println(detail.getTextContent());
								resultList.add(detail.getTextContent());
								if (index < xmlNode.size()) {
									index++;
									if (index == xmlNode.size()) {
										break;
									}
								}
							}
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return resultList;
	}
	
	/**
	 * 
	 * @param path
	 * @param type
	 * @param headNode
	 * @return
	 */
	public static List<String> getXMLNode(String path, String type,String headNode,String street) {
		File file = new File(path);// 可以使用绝对路劲
		String getNodeName ;
		DocumentBuilder db = null;// documentBuilder为抽象不能直接实例化(将XML文件转换为DOM文件)
		DocumentBuilderFactory dbf = null;
		Element element = null;
		List<String> nodes = new ArrayList<String>();
		try {
			dbf = DocumentBuilderFactory.newInstance();// 返回documentBuilderFactory对象
			db = dbf.newDocumentBuilder();
			Document dt = db.parse(file);
			element = dt.getDocumentElement();
			NodeList childNodes = element.getChildNodes();// 获得根元素下的子节点
			for (int i = 0; i < childNodes.getLength(); i++) {
				Node node1 = childNodes.item(i);
				if (headNode.equals(node1.getNodeName())) {
					String nodevalType = node1.getAttributes().getNamedItem("type").getNodeValue();// 子节点type属性值
					String nodevalStreet = node1.getAttributes().getNamedItem("street").getNodeValue();
					if (nodevalType.equals(type) && nodevalStreet.equals(street) ) {
						// 根据类型属性值不同的节点值
						NodeList nodeDetail = node1.getChildNodes();
						for (int j = 0; j < nodeDetail.getLength(); j++) {
							// 获得<Account>元素每一个节点,detail.getNodeName()
							Node detail = nodeDetail.item(j);
							getNodeName = detail.getNodeName();
							//System.out.println(getNodeName);
							if(getNodeName.startsWith("strongit-")){
								nodes.add(getNodeName);
							}
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return nodes;
	}
	
}
②在项目的根目录创建languages.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<Strongit>

    <!-- 子节点命名方式必须为:strongit-  -->
 	<Account type="type2" street="西樵镇">
  		<strongit-name>name</strongit-name>
  		<strongit-age>age</strongit-age>
  		<strongit-sex>sex</strongit-sex>
  		<strongit-addr>addr</strongit-addr>
	</Account>
	
</Strongit>
 ③调用解析XML的工具类
import java.util.List;

public class App {

	public static void main(String[] args) {
		
		 List<String> value = ResolveXML.getXMLValue("languages.xml", "type2", "Account","");
		 for(String result : value){
			 System.out.println(result);
		 }
	}

}
 ④显示结果
name age sex addr

猜你喜欢

转载自aclik.iteye.com/blog/2360505