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