【Java】JavaでXML解析

JavaでXMLを解析します。

  • XMLファイル

    <?xml version="1.0" encoding="UTF-8"?>
    <sample>
    	<location>
    		<area name="area1">
    			<shop type="kanto_shopName1" required="111" />
    		</area>
    		<area name="area2">
    			<shop type="sikoku_shopName1" required="222" />
    			<shop type="sikoku_shopName2" required="333" />
    		</area>
    		<area name = "area3">
    			<shop type="kansai_shopName1" required="444" />
    			<shop type="kansai_shopName2" required="555" />
    			<shop type="kansai_shopName3" required="666" />
    		</area>
    	</location>
    </sample>
    
  • XMLファイル読取

    /*
     * メイン処理を実行します。
     * @param args 引数
     */
    public static void main(String[] args) {
    
        try {
            File fileObject = new File("src/conf/test.xml");
            DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document document = docBuilder.parse(fileObject);
            NodeList nodeList = document.getChildNodes();
            scanNodes(nodeList);
            System.out.println("マップサイズ:" + resultMap.size());
    
            for (String key : resultMap.keySet()) {
                List<Z_XmlAnalyzerBean> list = resultMap.get(key);
                System.out.print("全体キーは" + key + "@");
                for (int i=0; i<list.size(); i++) {
                    Z_XmlAnalyzerBean bean = list.get(i);
                    System.out.print(bean.getKey() + ":" + bean.getValue() + ", ");
                }
                System.out.println("");
            }
    
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
  • XMLファイル解析

    /*
     * ノードリストを再帰的に解析します。
     * @param nodeList ノードリスト
     */
    public static void scanNodes(NodeList nodeList) {
    
        for (int i=0; i<nodeList.getLength(); i++) {
            Node node = nodeList.item(i);
            if (Node.ELEMENT_NODE == node.getNodeType()) {
                NamedNodeMap nodeMap = node.getAttributes();
                if (nodeMap != null) {
                    for (int j=0; j<nodeMap.getLength(); j++) {
                        if (nodeMap.item(j).getNodeName().equals("name")) {
                            String mapKey = nodeMap.item(j).getNodeValue();
                            List<Z_XmlAnalyzerBean> list = new ArrayList<Z_XmlAnalyzerBean>();
                            resultMap.put(mapKey, list);
                        }
    
                        if (nodeMap.item(j).getNodeName().equals("type")) {
                            String mapValueKey = nodeMap.item(j).getNodeName();
                            String mapValueValue = nodeMap.item(j).getNodeValue();
                            System.out.println(mapValueKey + ":" + mapValueValue);
    
                            Node parentNode = node.getParentNode();
                            NamedNodeMap parentNodeMap = parentNode.getAttributes();
                            String parentZokuseiName = parentNodeMap.item(0).getNodeName();
                            String parentZokuseiValue = parentNodeMap.item(0).getNodeValue();
                            System.out.println("親:" + parentZokuseiName + "," + parentZokuseiValue);
    
                            List<Z_XmlAnalyzerBean> list = resultMap.get(parentZokuseiValue);
                            Z_XmlAnalyzerBean bean = new Z_XmlAnalyzerBean();
                            bean.setKey(mapValueKey);
                            bean.setValue(mapValueValue);
                            list.add(bean);
                        }
                    }
                }
            }
    
            if (node.hasChildNodes()) {
                scanNodes(node.getChildNodes());
            }
        }
    }
    
  • XML要素格納Bean

    public class Z_XmlAnalyzerBean {
    
        private String key = null;
        private String value = null;
    
        public String getKey() {
            return key;
        }
        public void setKey(String key) {
            this.key = key;
        }
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
    }