①解析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